不对,结果就是5,我分析不出来结果怎么来的作者: 月影释 时间: 2014-3-25 00:20
结果就是
B
C
7
如果说原因的话 你代码写错了 21行应该是 i=5 不是 i+=5作者: 歌癫 时间: 2014-3-25 02:17
从你贴出的代码分析:
看主函数,它是程序的入口:
1,int i=4;这句你定义一个整型变量i,并赋值为4;不多说
2,Super d=new Demo("A");这里你父类对象,new子类,是多态的表现形式,多态体系在子父类关系中;new Demo("A"),将Demo对象初始赋值为A,它将找到对应的构造函数,public Demo(String a),这里面有一个默认的父类构造函数super();这时候程序找到父类的构造函数public Super(),结果打印B,i=2,此时继续运行,则打印C,i+=5,这时i=7;结束。
3,System.out.println(d.i);这里打印i的值,上面分析i=7,故打印7
最后输出的结果为:B C 7
继承关系的出现,父类的内容不仅仅是父类的,其子类也全部继承下来了,故此时d.i虽然用的是父类中的成员,但值是7作者: 疯狂沙漠 时间: 2014-3-25 09:37
Super d=new Demo("A");用父类型的变量接收子类对象,子类拥有父类的成员,那么父类中的i,子类就可以使用,在实例化子类时,首先会自动调用父类的无参构造方法,将i初始化为2,同时也打印出B,然后再执行子类的构造方法,输出C,i=7,故结果为
B
C
7 作者: tcny 时间: 2014-3-25 10:04
兄弟你看我的代码改动的地方,毕老师的子类没有重新定义int i ,所以子类把父类的 i 继承过去了。而我的代码重新定义了 i ,那么根据子类的成员变量不能覆盖父类的原则就是B C 2了。这个题我问过了,你不会是为了技术分在这瞎问问题吧?
public class Super {
int i = 0;
public Super(String a){
System.out.println("A");
i = 1;
}
public Super(){
System.out.println("B");
i += 2;
}
}