关于this和super的区别

先看实例:

父类
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成员和受保护

原文地址:https://www.cnblogs.com/dengshiwei/p/4258576.html