Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/379.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/docker/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java object.super()做什么?如何创建一个状态?_Java_State - Fatal编程技术网

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中。谢谢你的回答,太棒了。谢谢你的回答。