class A{
int name = 1;
}
class Parent extends A{
public void f(){
System.out.println(name); //name不是指this.name么?
g();
}
public void g(){
System.out.println("parent");
}
}
class Child extends Parent{
int name = 2;
public void g(){
System.out.println("child");
}
}
public class Hello {
public static void main(String[] args) {
Child c = new Child();
c.f(); //为什么f()函数输出name不是2??
Parent d = new Child();
d.f();
}
} //为什么调用函数就是当前对象g()
//而函数里引用变量确是找父类或自己的类,而不找子类的变量??????
如果有static修饰的话是被隐藏,而不是覆盖。
变量的话一般都是被隐藏。在Parent类中没有对name进行重新定义,所以f()中能打印出继承类A的name。
当然如果Child的某个方法中使用了name的话,它的值应该是2.
隐藏 和覆盖 的区别在于,子类对象转换成父类对象后,能够访问父类被隐藏 的变量和方法,而不能访问父类被覆盖 的方法。