Java object.super()做什么?如何创建一个状态?
所以我有这个代码:Java object.super()做什么?如何创建一个状态?,java,state,Java,State,所以我有这个代码: public class A { private State _state; public abstract class State { protected void setState(State newState) { _state = newState; } } public A() { _state = new AbstractState(this); }
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();
}
}
我很难理解它是如何工作的
因此,当一个对象
被创建时,它会创建一个抽象状态
对象,并将该对象
作为参数。而AbstractState
构造函数接收对象
,调用A.super()
根据我的理解,a.super()
调用a a
的超类的构造函数,即Object
,对吗?那有什么意义呢
我知道AbstractState
是一个抽象类。子类可以是:
public class StateOne extends AbstractState {
StateOne(A a) {
super(a);
}
}
但问题仍然存在
根据我的理解,a.super()
调用a的超类的构造函数,这就是对象,对吗?那有什么意义呢
我想你是在问为什么要写a.super()
,而不是super()
首先,它不是调用A
或A
超类的构造函数。构造函数中的super(…)
调用始终表示实例化的类的直接超类中的构造函数。在这种情况下,超类是内部类A.State
a.super()
实际上说的是“用a
作为封闭实例调用我的超类构造函数”
因为超类是一个内部类,所以需要使用不寻常的语法,并且当内部类被实例化时,它需要知道它所在的封闭类的实例是什么
在您的示例中,State
被声明为一个内部类(即非static
),因此setState
方法可以看到某个实例的私有\u State
变量,即封闭类(A
)。a.super()
是必需的,这样JVM就可以知道a
的哪个实例是封闭的
根据我的理解,a.super()
调用a的超类的构造函数,这就是对象,对吗?那有什么意义呢
我想你是在问为什么要写a.super()
,而不是super()
首先,它不是调用A
或A
超类的构造函数。构造函数中的super(…)
调用始终表示实例化的类的直接超类中的构造函数。在这种情况下,超类是内部类A.State
a.super()
实际上说的是“用a
作为封闭实例调用我的超类构造函数”
因为超类是一个内部类,所以需要使用不寻常的语法,并且当内部类被实例化时,它需要知道它所在的封闭类的实例是什么
在您的示例中,
State
被声明为一个内部类(即非static
),因此setState
方法可以看到某个实例的私有\u State
变量,即封闭类(A
)。a.super()
是必需的,这样JVM就可以知道a
的哪个实例是封闭的。object.super()在这里没有解释。除了对象,它是否与super()相同?或者它是该对象所在类的超类?它调用超类的构造函数StateOne
。我的意思是它在AbstractState中做什么。所以在a.super()
object.super()中没有解释。除了对象,它是否与super()相同?或者它是该对象所在类的超类?它调用超类的构造函数StateOne
。我的意思是它在AbstractState中做什么。所以在a.super()
Brilliant中。谢谢你的回答,太棒了。谢谢你的回答。