猿问

一道关于继承的面试题

题目描述
classSuper{
privateStringname="Super";
publicStringgetName(){
returnthis.name;
}
}
publicclassSubextendsSuper{
privateStringname="Sub";
publicstaticvoidmain(String[]args){
Subsub=newSub();
//Super
System.out.println(sub.getName());
}
}
你期待的结果是什么?实际看到的错误信息又是什么?
我以为会输出sub,但实际输出了super.我一直以为this指代的是方法的调用者,getName()是sub调用的,所以其中this的应该是sub,那么sub.name应该是sub;但是这很明显错了
湖上湖
浏览 498回答 2
2回答

慕桂英3389331

子类没有重写getName方法,所以调用的getName方法是父类的。在父类的方法里面this.name指向的是父类的name属性的地址。如果子类重写了父类的getName方法,子类的this.name就是sub了。
随时随地看视频慕课网APP

相关分类

JavaScript
我要回答