gpt4 book ai didi

java - object.super() 的作用是什么?如何创建国家?

转载 作者:行者123 更新时间:2023-12-01 17:53:37 25 4
gpt4 key购买 nike

所以我有这个代码:

public class A {
private State _state;

public abstract class State {
protected void setState(State newState) {
_state = newState;
}
}

public A() {
_state = new AbstractState(this);
}
}

public abstract class AbstractState extends A.State {
AbstractState(A a) {
a.super();
}
}

我很难理解它是如何工作的。

因此,当创建 A 对象 时,它会创建一个 AbstractState 对象,并以相同的 A 对象 作为参数。接收 A 对象AbstractState 构造函数调用 a.super()

据我了解,a.super()调用了A a的父类(super class)的构造函数,即Object,对吗?那么有什么意义呢?

我知道AbstractState是一个抽象类。子类可以是:

public class StateOne extends AbstractState {
StateOne(A a) {
super(a);
}
}

问题仍然存在。

最佳答案

From my understanding, a.super() calls the constructor of the super class of A a, which is Object, right? So what's the point?

我想你是在问为什么你必须写 a.super()而不是super() .

首先,它不是调用 A 的构造函数或 A 的父类(super class)。 super(...)构造函数中的调用始终表示您正在实例化的类的直接父类(super class)中的构造函数。在这种情况下,父类(super class)是内部类 A.State .

什么a.super()实际上说的是“使用 a 作为我的封闭实例来调用我的父类(super class)构造函数”。

需要不寻常的语法,因为父类(super class)是内部类,当实例化内部类时,它需要知道它所在的封闭类的实例

在您的示例中,State被声明为内部类(即不是 static ),因此 setState方法可以看私有(private)_state某些实例的变量封闭类( A )。 a.super()是必要的,这样 JVM 才能知道 A 的哪个实例。 是封闭的。

关于java - object.super() 的作用是什么?如何创建国家?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47372392/

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