super和this的区别

super和this都可以在成员方法中用来访问:成员变量和调用其他的成员函数,都可以作为构造方法的第一条语句,那它们有什么区别呢?

一、相同点

       1、都是Java中的关键字

       2、只能在类的非静态方法中使用,用来访问非静态成员方法和字段

       3、在构造方法中调用时,必须是构造方法的第一条语句,并且不能同时使用 

二、不同点

        1、this是当前对象的引用,当前对象即调用实例方法的对象,super相当于是子类对象中从父类继承下来部分成员的引用。

        2、在非静态成员方法中,this用来访问本来的方法和属性,super用来访问父类继承下来的方法和属性

        3、在构造方法中,this()用于调用本类构造方法,super()用于调用父类的构造方法,两种调用不能同时在构造方法中出现

        4、构造方法中一定会存在super()的调用,用户没有写编译器也会增加,但是this()用户不写则没有

 注意:在底层(字节码层面)this是存在的,但是super是不存在的,super是代码层面的一个关键字,在代码中可以通过super访问子类对象中从基类继承下来的成员,但是代码经过javac编译之后,super就不存在了

用以下代码加深理解

public class Base {
    public int a;
    public int b;
    public Base(int a,int b){
        this.a = a;
        this.b = b;
    }
}
public class Derived extends Base{
    public int d;
    public Derived(int a,int b,int d){
        super(a,b);
        this.d = d;
    }
    public void method(){
        super.a = 1;
        super.b = 2;
        this.d = 3;
    }

    public static void main(String[] args) {
        Derived derived = new Derived(1,2,3);
        derived.method();
    }
}

 


版权声明:本文为m0_53677355原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。