gpt4 book ai didi

java - 为什么 "this"来自子类的父类(super class)调用方法?

转载 作者:行者123 更新时间:2023-12-01 14:13:02 25 4
gpt4 key购买 nike

我在使用以下继承和 JDK 14 时遇到了这个问题

interface A {

default void a() {
System.out.println("default a");
}

default void b() {
System.out.println("default b");
}

}

class AImp implements A {

@Override
public void a() {
System.out.println("a from AImp");
}

@Override
public void b() {
System.out.println("b from AImp");
this.a();
}

}

class B extends AImp {

@Override
public void a() {
System.out.println("a from B");
}

@Override
public void b() {
System.out.println("b from B");
super.b();
}

}

当我运行时

B b = new B();

b.b();

控制台给出

b from B
b from AImp
a from B

为什么 AImp 中的关键字 this 引用了类 B 的实例?我对这里的东西感到困惑吗?感谢您抽出时间。

最佳答案

您已经创建了 B 的实例,它是动态类型,并且由于 动态绑定(bind) 总是调用 B 中声明的方法,因为它覆盖了 A。

在哪里调用方法重要,重要的是什么是动态类型。

super.method() 不同,它在继承中显式上升。

注意:构造函数永远不会被覆盖。所以调用 this(params) 不会委托(delegate)给子类。

关于java - 为什么 "this"来自子类的父类(super class)调用方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63448525/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com