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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 马伟奇 于 2013-5-6 10:04 编辑
  1. class Father {
  2.                 int m =6;

  3.                 public Father() {
  4.                         this.show();
  5.                 }

  6.                 void show() {
  7.                         System.out.println("父");
  8.                 }
  9.         }

  10.         class Child1 extends Father {
  11.                 int m =10;
  12.                  void show() {
  13.                         System.out.println(m);
  14.                 }
  15.         }

  16.         class Child2 extends Father {
  17.                 void show() {
  18.                         System.out.println(m);
  19.                 }
  20.         }

  21.         class Test1 {
  22.                 public static void main(String args[]) {
  23.                         Father n = new Child1();
  24.                         Father n1 = new Child2();
  25.                 }
  26. }
复制代码

评分

参与人数 1技术分 +1 收起 理由
田磊阳 + 1

查看全部评分

6 个回复

倒序浏览
你运行一下就会有结果
回复 使用道具 举报
askyle 发表于 2013-5-6 10:01
你运行一下就会有结果

我运行了,我知道结果,我想要的是结果的解释
回复 使用道具 举报
你代码看得我晕了。
结果是: 0   6
原因是:
Father n = new Child1(); //多态。父类引用子类对象。父类构造函数中this.show(),此时this指向Child1.
                      // 也就是说调用子类的show。问题出来了。为什么输出是0呢。                  
                      // 子类show又输出m,m是子类的成员变量,父类不知道m的值。
                      //所以jvm就会给m初始化。也就是0。所以就输出0咯。

Father n1 = new Child2();//输出6。这里的6是继承自父类的m。这个理解不难。

评分

参与人数 1技术分 +1 收起 理由
田磊阳 + 1

查看全部评分

回复 使用道具 举报
建议楼主把代码格式搞好。
我都把那啥类都看成内部类了。
内牛满面啊!!!!
回复 使用道具 举报
稍微改了一下,这样更好理解点。
  1. class Father
  2. {
  3.         int m 6;
  4.         int x =99;
  5.         public Father()
  6.         {
  7.                         this.show();
  8.         }

  9.         void show()
  10.         {
  11.                         System.out.println("父");
  12.         }
  13. }

  14. class Child1 extends Father
  15. {
  16.         int m =10;
  17.         int num;
  18.         void show()
  19.         {       
  20.                 System.out.println(x);//使用的是父类的成员变量的值。
  21.                 System.out.println(num);//当子类的成员变量值没有初始化,jvm会自动将其初始化为0
  22.                 System.out.println(m);//子类show输出m,m是子类的成员变量,父类不知道m的值。于是初始化m。
  23.         }
  24. }

  25. class Child2 extends Father
  26. {
  27.         void show()
  28.         {
  29.                 System.out.println(m);
  30.         }
  31. }

  32. class Test1
  33. {
  34.         public static void main(String args[])
  35.         {
  36.                         Father n = new Child1();
  37.                         Father n1 = new Child2();
  38.         }
  39. }
复制代码

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1

查看全部评分

回复 使用道具 举报
如果问题未解决,请继续追问,如果问题解决了,请将分类改为“已解决”,谢谢
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马