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 时返回为类?
尽管您正在调用 的doSomething()方法A,但this该调用期间的 是 a B,因此该方法是在on 而不是 on 上getClass()调用的。基本上,无论您使用的是来自 superclass 的方法、来自 的方法,还是来自的超类(所有 Java 类的父类)的方法,都将始终为 a 。BAthisBABAObject
this在这种情况下不会为你做任何事情。打电话this.getClass()和直接打电话没什么区别getClass();
因此,A 调用 getClass(),如果您正在处理扩展 A 的 B 实例,它将返回 B。
| 归档时间: |
|
| 查看次数: |
6725 次 |
| 最近记录: |