题目描述
class Super{
private String name = "Super";
public String getName() {
return this.name;
}
}
public class Sub extends Super{
private String name = "Sub";
public static void main(String[] args) {
Sub sub = new Sub();
//Super
System.out.println(sub.getName());
}
}
你期待的结果是什么?实际看到的错误信息又是什么?
我以为会输出sub, 但实际输出了super. 我一直以为this指代的是方法的调用者, getName()是sub调用的, 所以其中this的应该是sub, 那么sub.name应该是sub; 但是这很明显错了
this指向的就是创建的Sub sub = new Sub();对象,Sub继承Super后拥有两个name属性,一个是自己的name = "Sub",一个是父类的name = "Super",Sub没有重写getName方法,调用的是父类的getName方法,this.name是继承父类的name="super"属性。