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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 秦桂胜 中级黑马   /  2013-11-20 19:34  /  1461 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

  1. class test_parent
  2. {
  3.         int x = 5;
  4.         int y = 10;
  5.         void set_value(int a, int b)
  6.         {
  7.                 x = a;
  8.                 y = b;
  9.         }
  10.         int get_1()
  11.         {
  12.                 return this.x + this.y;
  13.         }
  14.         int get_2()
  15.         {
  16.                 return x - y;
  17.         }
  18. }

  19. class test_4 extends test_parent
  20. {
  21.         int y;
  22.         test_4(int a)
  23.         {
  24.                 y = a;
  25.         }
  26.         void set_value(int a, int b)
  27.         {
  28.                 x = a;
  29.                 y = b;
  30.         }
  31.         int get_2()
  32.         {
  33.                 return y;
  34.         }
  35. }

  36. class  Test2
  37. {
  38.         public static void main(String[] args)
  39.         {
  40.                 test_4  a1=new test_4(1);
  41.                 int x = a1.get_1();
  42.                 System.out.println("x="+x);
  43.         }
  44. }
复制代码
用  test_4  a1=new test_4(1) 后;a1.get_1()的内容为什么是15

评分

参与人数 1技术分 +1 收起 理由
FFF + 1 流程问题,比较简单。你还要多多努力哦~!.

查看全部评分

4 个回复

倒序浏览
test_parent   和test_4  两个类里面 都有变量 x  y  但是都是局部变量  当a1.get_1() 调用父类函数的时候    +return this.x + this.y   执行的就是 5 +10

评分

参与人数 1技术分 +1 收起 理由
FFF + 1 虽然解释有点简单,但还是鼓励你多来回答问.

查看全部评分

回复 使用道具 举报
本帖最后由 殷婷婷 于 2013-11-20 21:15 编辑

test_4  a1=new test_4(1);//此时执行子类构造方法,al中的y被赋值为1,但注意,这里的y是指在子类中重新定义的y,而不是父类定义的y,这个y的作用范围是子类。int x = a1.get_1();//调用父类中的get_1方法,this.x+ this.y 指的是父类中定义的x 与 y,当然是5+10
如果子类没有重新定义y,则 test_4  a1=new test_4(1);执行后,y 被赋值为1,这时的y是子类继承父类的y,即在父类中定义的y,那么执行int x = a1.get_1();后,x + y 为5+1
代码如下:
  1. class test_parent
  2. {
  3.         int x = 5;
  4.         int y = 10;
  5.         void set_value(int a, int b)
  6.         {
  7.                 x = a;
  8.                 y = b;
  9.         }
  10.         int get_1()
  11.         {
  12.                 return this.x + this.y;
  13.         }
  14.         int get_2()
  15.         {
  16.                 return x - y;
  17.         }
  18. }

  19. class test_4 extends test_parent
  20. {
  21. //这里不定义y,子类继承父类的y
  22.         test_4(int a)
  23.         {
  24.                 y = a;
  25.         }
  26.         void set_value(int a, int b)
  27.         {
  28.                 x = a;
  29.                 y = b;
  30.         }
复制代码

点评

FFF
感谢你为云七的耐心回答。每次你的回答都有带例子,而且有自己的解释。你的用心,我们都有看见!  发表于 2013-11-20 21:28

评分

参与人数 1技术分 +2 黑马币 +3 收起 理由
FFF + 2 + 3 额外+1活动技术!

查看全部评分

回复 使用道具 举报
1.类如果继承了父类,类加载器首先会加载父类,向上加载。2.你的子类当中没有调用的方法,可以向上引用父类的方法,如get_1();这个方法,之前父类已经加载过了,它的值已经生成了,所以你得到的是15.

评分

参与人数 1黑马币 +6 收起 理由
FFF + 6 虽然很给力,但是~~~你真的回答得太晚了~~~.

查看全部评分

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