class A {
public int i = 10;
}
class B extends A{
public int i = 20;
}
public class Test{
public static void main(String args[]){
B b = new B();
A a = b;
System.out.println(b.i);
System.out.println(a.i);
}
}
答案为什么是输出20,和10,大神们能说一下里面的执行顺序吗,都快搞晕了作者: 我手心里的宝 时间: 2013-3-31 21:37
你new B()对象 b.i当然是访问对象b的i的值
后面你让父类指向子类对象,所以a.i访问的是A类的i的值
这用到了多多态,父类指向子类对象,在方法中,如果子类复写了父类的方法,父类会调用子类的方法,如果父类没有子类调用的方法,
则会报错
对于属性还是各自用各自的
说到顺序:
1.创建了子类对象
2.父类指向了子类对象
3.调用子类的i的值
4.调用了父类的i的值作者: 我自信我很牛 时间: 2013-3-31 21:41
你的输出语句第一条直接是子类引用指向子类对象,所以毫无疑问调用的肯定是子类自己的属性,所以是20,第二条输出语句中的引用是父类,再调用属性也是父类特有的属性,只有调用方法时,子类重写父类的方法才会被调用.作者: 赵喜平 时间: 2013-3-31 22:03