int i=0;
public Super(String a)
{
System.out.println("A");
i=1;
}
public Super()
{
System.out.println("B");
i=4;
}
}
class Demo extends Super
{
public Demo(String a)
{
System.out.println("C");
i=5;
}
public static void main(String[] args)
{
Super d=new Demo("A");
System.out.println(d.i);
}
}
2.
class Super
{
int i=0;
public Super(String a)
{
System.out.println("A");
i=1;
}
public Super()
{
System.out.println("B");
i=4;
}
}
class Demo extends Super
{
int i=2;
public Demo(String a)
{
System.out.println("C");
i=5;
}
public static void main(String[] args)
{
Super d=new Demo("A");
System.out.println(d.i);
}
}
3
class Super
{
int i=0;
public Super(String a)
{
System.out.println("A");
i=1;
}
public Super()
{
System.out.println("B");
i=4;
}
}
class Demo extends Super
{
int i=7;
public Demo(String a)
{ super(a);
System.out.println("C");
i=5;
}
public static void main(String[] args)
{
Super d=new Demo("A");
System.out.println(d.i);
第一题:过程是这样的先调用了super d = new Demo("A");在堆内存中创建了new Demo对象,找子类中是否有带参数的构造函数,找到后子类构造函数中有隐式的super()语句,找父类空参构造函数,执行了B,在找子类输出C,然后调用了d.i,因父类初始化完毕调用的子类的5,结果是B C 5。
第二题:过程是这样的先调用了super d = new Demo("A");在堆内存中创建了new Demo对象,找子类中是否有带参数的构造函数,找到后子类构造函数中有隐式的super()语句,找父类空参构造函数,执行了B,在找子类输出C,然后调用了d.i,但是这个跟第一题不同,因为子父类中都有成员变量,根据多态成员变量的编译和运行都参考等号左边,走的是父类成员变量,最终的执行结果是B C 4。
第三题:过程是这样的先调用了super d = new Demo("A");在堆内存中创建了new Demo对象,找子类中是否有带参数的构造函数,找到后子类构造函数中执行了的super(a)语句,找父类带参的构造函数,执行了A,在找子类输出C,然后调用了d.i,因为子父类中都有成员变量,根据多态成员变量的编译和运行都参考等号左边,走的是父类成员变量,最终的执行结果是A C 1。作者: 郭金龙 时间: 2012-12-18 14:52
凊係柈泩 发表于 2012-12-18 13:01
第一题:过程是这样的先调用了super d = new Demo("A");在堆内存中创建了new Demo对象,找子类中是否有带参 ...