黑马程序员技术交流社区
标题:
大家来看看这个程序的结果是什么?交流一下
[打印本页]
作者:
梁秋瑜
时间:
2013-5-26 22:18
标题:
大家来看看这个程序的结果是什么?交流一下
本帖最后由 梁秋瑜 于 2013-5-28 20:21 编辑
class Super{
int i=0;
public Super(String a){
System.out.println("A");
i=1;
}
public Super(){
System.out.println("B");
i+=2;
}
}
//----------------------------------------------
class Demo extends Super{
public Demo(String a){
super();
System.out.println("C");
int i=5;
}
public static void main(String[] args){
int i=4;
Super d=new Demo("A");
System.out.println(d.i); //i的结果为什么是2?
}
}
作者:
萌小子
时间:
2013-5-26 22:29
因为调用的是父类的无参构造方法,i=0;i+=2;所以输出结果就是2了。
如果把super()改成super(a),输出结果就是1了。
作者:
lpflpy
时间:
2013-5-26 22:44
楼上正解
作者:
谢孔营
时间:
2013-5-26 23:05
哥们要理解局部变量,成员变量的区别
class Super{
int i=0;
public Super(String a){
System.out.println("A");
i=1;
}
public Super(){
System.out.println("B");
i+=2;
}
}
//----------------------------------------------
class Demo extends Super{//
此时从父类中继承了i成员变量
public Demo(String a){
super();//
调用父类的无参数的构造方法,之后i成员变量为2
System.out.println("C");
int i=5;
//此处i为局部变量,不影响成员变量
}
public static void main(String[] args){
int i=4;
Super d=new Demo("A");
System.out.println(d.i); //i的结果为什么是2?
}
}
作者:
陈潜
时间:
2013-5-27 01:53
class Super {
int i = 0;
public Super(String a) {
System.out.println("A");
i = 1;
}
public Super() {
System.out.println("B");
i += 2;
}
}
// ----------------------------------------------
class Demo extends Super {
// int i;
public Demo(String a) {
super(); // 调用父类无参方法i=2
System.out.println("C");
int i = 5; // int i 是在方法内部定义的,不是成员变量
// this.i = 5; 其实你是要这样玩多态?即是是这样的话,结果也是2,因为多态中成员变量和函数不同,编译运行都看左边
}
public static void main(String[] args) {
int i = 4; // main方法也是方法。。。成员变量
Super d = new Demo("A");
System.out.println(d.i); // i的结果为什么是2?成员变量i只有Super中的i一个,
}
}
复制代码
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2