黑马程序员技术交流社区

标题: 大家来看看这个程序的结果是什么?交流一下 [打印本页]

作者: 梁秋瑜    时间: 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
  1. class Super {
  2.         int i = 0;

  3.         public Super(String a) {
  4.                 System.out.println("A");
  5.                 i = 1;
  6.         }

  7.         public Super() {
  8.                 System.out.println("B");
  9.                 i += 2;
  10.         }
  11. }

  12. // ----------------------------------------------
  13. class Demo extends Super {
  14.         // int i;
  15.         public Demo(String a) {
  16.                 super(); // 调用父类无参方法i=2
  17.                 System.out.println("C");
  18.                 int i = 5; // int i 是在方法内部定义的,不是成员变量
  19.                 // this.i = 5; 其实你是要这样玩多态?即是是这样的话,结果也是2,因为多态中成员变量和函数不同,编译运行都看左边
  20.         }

  21.         public static void main(String[] args) {
  22.                 int i = 4; // main方法也是方法。。。成员变量
  23.                 Super d = new Demo("A");
  24.                 System.out.println(d.i); // i的结果为什么是2?成员变量i只有Super中的i一个,
  25.         }
  26. }
复制代码





欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2