[英]Extending class with hidden constructors
我有一个基类FiniteStateMachine
,其中有一个State
列表。 状态只能通过FSM实例化,因此我可以确保列表已更新。
public class FiniteStateMachine {
private List<State> states = new ArrayList<State>();
public State addState(String name) {
State s = new State(name);
states.add(s);
return s;
}
protected void addState(State s) {
states.add(State s);
}
public static class State {
private String name;
protected State(String name) { this.name = name; }
}
}
现在,我想将FiniteStateMachine
和State
类都扩展为MyFSM
和MyState
类。 我仍然要确保只能通过FSM创建新的MyState
状态,以确保它们是列表的一部分。
到目前为止,这是我所做的:
public MyState extends FinitStateMachine.State {
private int n;
protected MyState(int n, String name) {
super(name);
this.n = n;
}
}
public MyFSM extends FiniteStateMachine {
@Override
public State addState(String name) {
throw new UnsupportedOperationException();
}
public MyState addState(int n, String name) {
MyState s = new MyState(n, name);
super.addState(s);
return s;
}
}
我不确定我做对了。
首先,原始State
类是FiniteStateMachine
的内部类,在这里,我将其扩展到新类MyFSM
。
其次,我必须在原始FiniteStatMachine
添加新方法
protected void addState(State s) {
states.add(State s);
}
否则,我不知道如何将新MyState
类的状态附加到FiniteStateMachine
列表。 第三,我不是重写addState(name)
方法,而是addState(name)
进行残废处理并引发异常,而是放置一个全新的方法来返回新类。
如果有针对这些情况的编码模式,我将不会意识到。 但是我想知道,所以我不会再发明轮子了。
如果使列表变量受保护,则也可以从子类访问它,而无需添加方法。 这取决于您以后要执行的操作以及列表的可见性。 如果希望能够从继承层次结构之外添加状态,或者不希望列表在整个包中可见,则可能需要使用addState方法。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.