我对所需的初始化程序和继承有疑问。
这是我的继承图:
TreeNode
+ ValueNode<ValueType>
+ [final] ConstantNode<ValueType>
+ UnaryNode<OperandType,ResultType>
+ ActionNode
+ [final] SequenceNode
+ [final] LoopNode
在基类TreeNode
中,我有两个初始化器(两者都是必需的):
1. public required init(factory: RandomTreeFactory, maximumDepth: Int)
2. public required init(id: Int, maximumDepth: Int)
通过调用ValueNode
,ActionNode
和super.init()
转发这些初始值设定项。
在ConstantNode
中,我实现了这些初始值设定项(请注意第2号和第4号初始值设定项之间签名的更改)。
3. public required init(factory: RandomTreeFactory, maximumDepth: Int)
4. public init(id: Int, maximumDepth: Int, constant: ValueType)
这是来自Swift的Apple手册的引用:
在类初始化程序的定义之前编写
required
修饰符,以指示该类的每个子类都必须实现该初始化程序。
我的问题是:为什么不能实现初始值设定项。尽管被标记为ConstantNode
,required
中的2?
次要问题:当我想在ActionNode
的子类(例如SequenceNode
或LoopNode
)中执行相同操作时,为什么编译器会抱怨?这是因为泛型吗?
提前致谢, 彼得。