我想一些同学对this和super还有些不理解,我这里通过例子来给大家说明几点问题:- package cn.conpany.test.object;
- public class Demo {
- /**
- * @param args
- */
- public static void main(String[] args) {
- SonClass s = new SonClass();
- System.out.println("输入1的结果:" + s.add(1));
- System.out.println("输入2的结果:" + s.add(2));
- System.out.println("输入3的结果:" + s.add(3));
- System.out.println("输入4的结果:" + s.add(4));
- System.out.println("输入5的结果:" + s.add(5));
- }
- }
- class FatherClass{
- //定义成员
- private int value1 = 12;
- public int value2 = 7;
- //父类构造函数
- public FatherClass() {}
- }
- class SonClass extends FatherClass {
- //定义子类成员
- private int value1 = 5;
- public int value2 = 15;
- public int value = 20;
- public SonClass(){}
-
- //定义子类方法,验证this与super用法
- public int add(int value){
- if(value==1)
- //value为传入值与父类公有成员相加
- return value + super.value2;
- else if(value==2)
- //value1为子类私有值与父类公有成员相加
- return this.value1 + super.value2;
- else if(value==3)
- //value2为子类公有值与传入值相加
- return value2 + value;
- else if(value==4){
- //传入值和子类共有成员相加
- return value + this.value;
- }
- else
- //子类与父类公有成员相加
- return this.value2 + super.value2;
- }
- }
复制代码 大家可以自己运行一下,就知道结果了,我把结果放在下面,希望想了解的人最好自己运行一下。
为什么会出现这种情况呢?
1、当子类继承父类,那么会得到父类中除了默认权限(defaulted)外的所有成员(也包括私有,但是只是继承了并不能访问,私有只有类内部可访问),那么,如果要访问父类的,就需要加super。
2、其中的this,代表的是当前的对象,如上面的例子,不是你传入的value,而是s这个对象自身有value,你必须加上this才表示当前的对象自己的值,如上面value==4的情况
|
|