package jichengyc;
public class Main {
public static void main(String[] args)
{
a x = new a();
// System.out.println(x.i);
//x.getvalue();
a y = new aa();
//y.getvalue();
System.out.println("x中的i值:"+x.i);
System.out.println("y中的i值:"+y.i);
}
}
class a
{
public int i ;
public a()
{
//System.out.println("a: "+i);
i = 5;
// System.out.println("a: "+i);
}
public void getvalue()
{
System.out.println(i);
}
}
class aa extends a
{
public int i;
public aa()
{
//System.out.println("aa: "+i);
i = 6;
//System.out.println("aa: "+i);
}
public void getvalue()
{
System.out.println(i);
}
}
结果为 :
x中的i值:5
y中的i值:5
为什么 y的值为5 不是 6
下面是解释:
在继承中,用对象或者this.调方法与调用属性是不同的,楼主你只要熟记:
父引用(此时必须是子对象)调 重写的member方法时,是调子类的member方法,
父引用(此时必须是子对象)调 重写的static方法时,是调父类的static方法,
父引用(此时必须是子对象)调 属性(不管是member属性还是static属性),是调父类的属性。
父引用(装父对象)调方法和属性时就只能调父类的,不能调子类的。
this. member方法时 也是找子类的重写方法,
this. static方法时 调的是书写这个 "this." 类区的static方法,
this. 属性(不管是member还是static)都是调的是书写这个 "this." 类区的static方法,
你的y是个父引用(装子对象) 此时y.i 就是调父类class A{}里的i,所以输出是1