先看实例:
父类
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成员和受保护