Dart:如何为模型对象定义一个抽象类,该模型对象具有一个接受它的函数';s自身的类型作为参数

Dart:如何为模型对象定义一个抽象类,该模型对象具有一个接受它的函数';s自身的类型作为参数,dart,abstract-class,Dart,Abstract Class,我在Dart中遇到以下问题: 我想定义一个抽象类ModelObjects,它有一些函数。其中包括函数isSame abstract class ModelObject{ bool isSame(ModelObject object); ... } 现在我定义PlayerModel类如下: class PlayerModel extends ModelObject{ bool isSame(PlayerModel player){ //some code th

我在Dart中遇到以下问题:

我想定义一个抽象类ModelObjects,它有一些函数。其中包括函数isSame

abstract class ModelObject{
   bool isSame(ModelObject object);
   ...
}
现在我定义PlayerModel类如下:

class PlayerModel extends ModelObject{
     bool isSame(PlayerModel player){
       //some code that checks if the objects are the same
     }
这导致dart给我一个编译错误:

PlayerModel.IsName'('bool函数(PlayerModel)')不是对'ModelObject.IsName'('bool函数(ModelObject)')的有效重写。dart(无效的_重写)

我通过使ModelObjects成为泛型对象,成功地避开了这个问题

abstract class ModelObject<T>{
    bool isSame(T object);}
抽象类模型对象{
bool isSame(T对象);}
但这似乎更像是一个骗局,而不是一个解决方案


现在我的问题是:有没有更优雅的方法来解决这个问题,或者抽象类在这种情况下只是一种错误的方法?

我相信您可以使用以下关键字:

class PlayerModel扩展了ModelObject{
@凌驾
布尔isSame(协变玩家模型玩家){
//检查对象是否相同的一些代码
}

谢谢!这将我带到了这一页:,在这里问题得到了很好的解释。我还修改了你的答案,将协方差关键字放入了超类ModelObject中:抽象类ModelObject{bool isSame(协变ModelObject){…},这似乎也很有效。