先看实例:
父类
class BaseClass{ private int value; public void printValue() { this.run(); //注意这儿的是this } private void run(){ System.out.println("BaseClass.run():"+this.value); } }
class ChildClass extends BaseClass { private int value = 100; public void printValue() { super.run(); //注意这儿的是super } //重写 private void run(){ System.out.println("ChildClass.run():"+super.value); } }
class GrandsonClass extends ChildClass { private int value = 200; //再次重写 public void run() { System.out.println("SunziClass.run():"+super.value); } }
测试:
public class Test { public static void main(String[] args) { BaseClass child = new ChildClass(); fc.printValue(); BaseClass Grandson = new GrandsonClass (); fc1.printValue(); ChildClass cc = new <span style="font-family: Arial, Helvetica, sans-serif;">GrandsonClass</span><span style="font-family: Arial, Helvetica, sans-serif;">(); </span> cc.<span style="font-family: Arial, Helvetica, sans-serif;">printValue</span><span style="font-family: Arial, Helvetica, sans-serif;">(); </span> <span style="white-space:pre"> </span> } }运行结果如下:
ChildClass.run():0;
SunziClass.run():100;
FatherClass.run():0;
重写父类方法属性,就是再创建了一个子类的特征,当你用this的时候,就覆盖了父类的特征了,但是父类特征还在那儿,用super就能访问道,但是只能在对象的内部使用.对象外面就只能看到覆盖了父类特征的子类特征了.
其实就是一句:"this是当前对象在堆空间的引用地址,super是当前对象的父类特征的引用
this获取到本类所有成员和父类的public成员,super是获取父类public成员和受保护