继承和"this"关键字

slo*_*mir 12 java inheritance this

假设我们有下一个情况:

家长A:

class A{  
    public A(){}
    public doSomething(){  
        System.out.println(this.getClass());
    }
}
Run Code Online (Sandbox Code Playgroud)

带着孩子B级:

class B extends A{  
    public B(){}
    public void doSomething(){
        super.doSomething();
        System.out.println(this.getClass());
    }
}
Run Code Online (Sandbox Code Playgroud)

和主要课程:

class Main{  
    public static void main(String[] args){
        A ab=new B();
        ab.doSomething();
    }
}
Run Code Online (Sandbox Code Playgroud)

当我执行此代码时,结果是

B  
B
Run Code Online (Sandbox Code Playgroud)

为什么this在超类A中引用,B引用是类型A 时返回为类?

Tom*_*rys 16

引用是什么并不重要,它是实例化对象的类.您正在创建的对象是B类型,因此this.getClass()始终返回B.


jus*_*tkt 5

尽管您正在调用 的doSomething()方法A,但this该调用期间的 是 a B,因此该方法是在on 而不是 on 上getClass()调用的。基本上,无论您使用的是来自 superclass 的方法、来自 的方法,还是来​​自的超类(所有 Java 类的父类)的方法,都将始终为 a 。BAthisBABAObject


jzd*_*jzd 4

this在这种情况下不会为你做任何事情。打电话this.getClass()和直接打电话没什么区别getClass();

因此,A 调用 getClass(),如果您正在处理扩展 A 的 B 实例,它将返回 B。