dart - 我可以在子类中重新定义父类(super class)的属性吗? (也许是C#的新修饰符?)

标签 dart

狗窝有一只狗。

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/

相关文章:

dart - 模板不是自动绑定(bind)的

oauth-2.0 - Flutter packages pub - UnauthorizedAccess : Unauthorized user: . ..不允许将版本上传到包

dart - 关于使用 Future 和 Completers 的问题

linux - 异常 : No Linux desktop project configured error on flutter project

dart - 这是 loginRequired(f)() 在 dart 中处理登录所需功能的方式吗?

flutter - 在Flutter Firestore中, 'Future<dynamic>'类型不是 '() => void'类型的子类型

android - Firebase未添加实时数据

dart - list.elementAt(n) 和 list[n] 之间有什么区别吗

dart - 如何使用多个隔离来处理请求

带有背景音乐的 Flutter App(外部)