创建类A
public class A {
public void func1() {
System.out.println(this.getClass().getName()+"---func1");
}
}
创建类B
public class B extends A{
@Override
public void func1() {
super.func1();
System.out.println(this.getClass().getName()+"---func1");
}
}
在调用时:
public class Test {
public static void main(String[] args) {
A a = new B();
a.func1();
}
}
为何结果为:
cn.java.oop.B---func1
cn.java.oop.B---func1
而不是
cn.java.oop.A---func1
cn.java.oop.B---func1
感谢Sanjay yww与毕小宝
再测了把-》
public class Test {
public static void main(String[] args) {
A a = new B();
// a.func1();
System.out.println(a.getClass().getName());
}
}
结果为:
cn.java.oop.B
A a = new B();
多态
实例a的classname已经是B,而你用的this,指的就是当前实例
这涉及到多态问题,因为虽然定义的是 A 类型,但是实际上是 B 的实例。
例子中虽然调用的父类的方法,但是 this 还是当前实例,即 B 类型。
this 始终指的是当前具体子类的实例的。