class A
{
int i =5;
}
class B extends A{
public B(){
i = 7;
}
}
public class Demo1 {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
A a = new B();
System.out.println(a.i);
}
}
答案是7
因为子类中没有重新定义变量i
如果子类中是这样:
class B extends A{
public B(){
int i = 7;
}
}
那答案就是5,而楼主的是这样的:
class B extends A{
public B(){
i = 7;
}
}
楼主在子类构造方法中操作的是父类中定义的变量i,即使父类中初始化是5,在new B()的时候,子类 继承过来之后,传了一个7给i,所以答案自然是传值后的了作者: Super_Class 时间: 2013-5-29 00:52
多态:
编译看左边,运行看右边。基本解决你大多数问题作者: FantasticPie 时间: 2013-5-29 01:01
你的这段代码很好解释。首先B是A的子类,这样B拥有A类所有的非私有的成员变量。明白了这个问题来看主函数,创建了一个B的对象,这就用到了成员变量的初始化的顺序问题:先初始化成员变量,再执行构造方法,因此i的值先是5后变为7,看下下面的打印结果为5和 7.