A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 梁秋瑜 于 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?
}
}

评分

参与人数 1技术分 +1 收起 理由
殇_心。 + 1

查看全部评分

4 个回复

倒序浏览
因为调用的是父类的无参构造方法,i=0;i+=2;所以输出结果就是2了。
如果把super()改成super(a),输出结果就是1了。
回复 使用道具 举报
楼上正解
回复 使用道具 举报
哥们要理解局部变量,成员变量的区别
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?
}
}

评分

参与人数 1技术分 +1 收起 理由
殇_心。 + 1

查看全部评分

回复 使用道具 举报
  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. }
复制代码

评分

参与人数 1技术分 +1 收起 理由
殇_心。 + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马