标题: 好复杂,下面代码的输出结果是什么,为什么呢,求解释 [打印本页] 作者: vaqh 时间: 2014-7-28 21:49 标题: 好复杂,下面代码的输出结果是什么,为什么呢,求解释 class Super {
int i=0;
public Super()
{
System.out.println("A");
i=1;
}
public Super(char a)
{
System.out.println("B");
i+=2;
}
}
class Demo extends Super
{
public Demo(String a)
{
System.out.println("C");
i=5;
}
public static void main(String[] args) {
int i=4;
Super s = new Demo("a");
System.out.println(s.i);
}
}
作者: ztw 时间: 2014-7-28 22:02
A C 1 当你新建对象时,先调用子类的构造函数,然后执行父类的无参构造函数,所以先打印A,然后在打印C,多态的变量值在父类和子类中都不变,只看左边作者: fantacyleo 时间: 2014-7-28 22:16 本帖最后由 fantacyleo 于 2014-7-28 22:17 编辑
A C 5
A和C的原因正如2楼所说。至于5,要注意的是:
1. 成员变量不存在多态,只存在隐藏——即子类定义了和父类同名的成员变量,此时到底访问谁的成员变量,只看引用变量的类型
2. 但是,本题中子类没有另外声明i,因此子类构造方法中的i就是继承自父类的i,子类构造函数赋值i=5,也就是改变了从父类继承下来的i的值,因此s.i的值是5。作者: star5603 时间: 2014-7-28 22:16
默认会先调用父类无参构造函数,A,i =1;
然后调用子类自己的含参构造寒素,C,i=5;
最后AC5作者: vaqh 时间: 2014-7-28 22:32