基本上,我想用不同的参数覆盖父类。例如:
class Hold<T> {
public var value:T;
public function new(value:T) {
set(value);
}
public function set(value:T) {
this.value = value;
}
}
然后覆盖该类,例如:
class HoldMore extends Hold<T> {
public var value2:T;
public function new(value:T, value2:T) {
super(value);
set(value, value2);
}
override public function set(value:T, value2:T) {
this.value = value;
this.value2 = value2;
}
}
显然这会返回错误Field set overloads parent class with different or incomplete type
。有没有解决的办法?我尝试使用public dynamic function
,然后在set
函数中设置new()
,但这会产生非常类似的错误。有什么想法吗?
答案 0 :(得分:3)
这只是@ stroncium答案的补充,这是完全正确的。
以下是 的样子:
class Hold<T> {
public var value:T;
public function new(value:T) {
set(value);
}
public function set(value:T) {
this.value = value;
}
}
class HoldMore<T> extends Hold<T> {
public var value2:T;
public function new(value:T, value2:T) {
super(value);
setBoth(value, value2);
}
// you cannot override "set" with a different signature
public function setBoth(value:T, value2:T) {
this.value = value;
this.value2 = value2;
}
}
或者,你可以使用一个数组作为参数或一个包含多个值的动态对象,以便设置&#34;它们使用相同的方法,但是你放弃了一些编译器的类型检查。
答案 1 :(得分:1)
如果你编写了基类,你可以为它添加一个可选参数,但这可能是一种解决方法,而不是你想要做的。
答案 2 :(得分:1)
在目前的状态下,它完全不起作用。不仅有一个问题,而且很少有问题:
答案 3 :(得分:0)
不幸的是,语言不允许这样做。