黑马程序员技术交流社区

标题: 举例解释this与super,让你一目了然 [打印本页]

作者: 黄玉昆    时间: 2013-3-27 10:46
标题: 举例解释this与super,让你一目了然
我想一些同学对this和super还有些不理解,我这里通过例子来给大家说明几点问题:
  1. package cn.conpany.test.object;

  2. public class Demo {

  3.         /**
  4.          * @param args
  5.          */
  6.         public static void main(String[] args) {
  7.                 SonClass s = new SonClass();
  8.                 System.out.println("输入1的结果:" + s.add(1));
  9.                 System.out.println("输入2的结果:" + s.add(2));
  10.                 System.out.println("输入3的结果:" + s.add(3));
  11.                 System.out.println("输入4的结果:" + s.add(4));
  12.                 System.out.println("输入5的结果:" + s.add(5));

  13.         }

  14. }

  15. class FatherClass{
  16.         //定义成员
  17.         private int value1 = 12;
  18.         public int value2 = 7;
  19.         //父类构造函数
  20.         public FatherClass() {}
  21. }

  22. class SonClass extends FatherClass {
  23.         //定义子类成员
  24.         private int value1 = 5;
  25.         public int value2 = 15;
  26.         public int value = 20;
  27.         public SonClass(){}
  28.        
  29.         //定义子类方法,验证this与super用法
  30.         public int add(int value){
  31.                 if(value==1)
  32.                         //value为传入值与父类公有成员相加
  33.                         return value + super.value2;
  34.                 else if(value==2)
  35.                         //value1为子类私有值与父类公有成员相加
  36.                         return this.value1 + super.value2;
  37.                 else if(value==3)
  38.                         //value2为子类公有值与传入值相加
  39.                         return value2 + value;
  40.                 else if(value==4){
  41.                         //传入值和子类共有成员相加
  42.                         return value  + this.value;
  43.                 }
  44.                 else
  45.                         //子类与父类公有成员相加
  46.                         return this.value2 + super.value2;
  47.         }
  48. }
复制代码
大家可以自己运行一下,就知道结果了,我把结果放在下面,希望想了解的人最好自己运行一下。

为什么会出现这种情况呢?
1、当子类继承父类,那么会得到父类中除了默认权限(defaulted)外的所有成员(也包括私有,但是只是继承了并不能访问,私有只有类内部可访问),那么,如果要访问父类的,就需要加super。
2、其中的this,代表的是当前的对象,如上面的例子,不是你传入的value,而是s这个对象自身有value,你必须加上this才表示当前的对象自己的值,如上面value==4的情况


作者: 黄诗宾    时间: 2013-3-27 12:34
顶一个 老黄总是分享一些非常有用的东西
作者: 曹春贵    时间: 2013-3-27 12:42
顶一个{:soso_e113:}




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