public class Hello { /**
* @param args
*/
public static void main(String[] args) {
A x = new A();
A y = new AA();
System.out.println("x="+x.i+" "+"y="+ y.i); }}
class A{
public int i; A()
{
i = 1;
}
}
class AA extends A{
public int i; AA()
{
i = 2;
}
}
问:为什么 输出结果为x=1 y=1;而不是y=2;谢谢
* @param args
*/
public static void main(String[] args) {
A x = new A();
A y = new AA();
System.out.println("x="+x.i+" "+"y="+ y.i); }}
class A{
public int i; A()
{
i = 1;
}
}
class AA extends A{
public int i; AA()
{
i = 2;
}
}
问:为什么 输出结果为x=1 y=1;而不是y=2;谢谢
父引用(此时必须是子对象)调 重写的member方法时,是调子类的member方法,
父引用(此时必须是子对象)调 重写的static方法时,是调父类的static方法,
父引用(此时必须是子对象)调 属性(不管是member属性还是static属性),是调父类的属性。 父引用(装父对象)调方法和属性时就只能调父类的,不能调子类的。 this. member方法时 也是找子类的重写方法,
this. static方法时 调的是书写这个 "this." 类区的static方法,
this. 属性(不管是member还是static)都是调的是书写这个 "this." 类区的static方法, 你的y是个父引用(装子对象) 此时y.i 就是调父类class A{}里的i,所以输出是1
这本书里介绍的最权威,也比较清楚。
ZangXT 也谢谢你介绍这本书给我看