继承和“this”关键字

2022-09-03 12:18:33

假设我们有下一个情况:

父类 A:

class A{  
    public A(){}
    public doSomething(){  
        System.out.println(this.getClass());
    }
}

儿童 B 类:

class B extends A{  
    public B(){}
    public void doSomething(){
        super.doSomething();
        System.out.println(this.getClass());
    }
}

和主类:

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

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

B  
B

为什么超类 A 中引用的 作为类返回,而引用是 A 类型?thisB


答案 1

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


答案 2

尽管您正在调用 的方法,但在该调用期间是一个 ,因此该方法被调用而不是 on 。基本上,无论你使用的是来自超类的方法,还是来自 的方法,还是来自 的超类(所有Java类的父类)。都将始终是。doSomething()AthisBgetClass()BAthisBABAObject