狗窝有一只狗。
KennelWithPlayground(Kennel类型)具有DogWithABall(Dog类型),不能仅具有普通Dog。
我希望能够像对待普通狗一样对待任何类型的狗窝。
因此,我想在子类中重新定义父类(super class)的属性。新属性将是该属性的父类(super class)的子类。在Dart中这可能吗? (可能类似于C#中的“new”修饰符)。还是有另一种方法来实现这一目标?
以下代码不起作用,因为在KennelWithPlayground类中,DogWithABall不是Dog的有效替代。
class Dog {
String get bark => "woof";
}
class DogWithBall extends Dog {
String get ballAction => "boing";
}
abstract class Kennel {
Dog dog;
}
class KennelWithPlayground implements Kennel {
DogWithBall dog; //**invalid override**
KennelWithPlayground(DogWithBall dog);
}
void processKennel(Kennel kennel){
kennel.dog.bark;
if (kennel is KennelWithPlayground)
print(kennel.dog.ballAction);
else
print("Bored dog");
}
最佳答案
可能,但是仅当该属性没有 setter 时才可以。
class Foo {
final num value;
Foo(this.value);
}
class Bar implements Foo {
final double value;
Bar(this.value);
}
关于dart - 我可以在子类中重新定义父类(super class)的属性吗? (也许是C#的新修饰符?),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57374459/