黑马程序员技术交流社区

标题: 变量问题 [打印本页]

作者: 秦桂胜    时间: 2013-11-20 19:34
标题: 变量问题
  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

作者: Faner    时间: 2013-11-20 19:52
test_parent   和test_4  两个类里面 都有变量 x  y  但是都是局部变量  当a1.get_1() 调用父类函数的时候    +return this.x + this.y   执行的就是 5 +10
作者: 殷婷婷    时间: 2013-11-20 21:11
本帖最后由 殷婷婷 于 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.         }
复制代码

作者: 吴琼cola    时间: 2013-11-21 08:56
1.类如果继承了父类,类加载器首先会加载父类,向上加载。2.你的子类当中没有调用的方法,可以向上引用父类的方法,如get_1();这个方法,之前父类已经加载过了,它的值已经生成了,所以你得到的是15.




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