“super”关键字不能在扩展中使用,因为扩展没有超类

问题描述 投票:0回答:1

我收到以下错误

The 'super' keyword can't be used in an extension because an extension doesn't have a superclass.

有了这个代码,

class Animal {
  final String name;

  Animal({required this.name});

  void jump() {
    print("Jumping");
  }
}

class Dog extends Animal {
  final String breed;

  Dog({required this.breed, required super.name});
}


extension DogExtension on Dog {
  void jump() {
    super.jump();
    print("and Waving Tail");
  }
}

我不能简单地直接重写 Dog 类中的方法,而不是使用扩展,因为类

Dog
是由代码生成器自动生成的。

另外,我不想简单地将扩展中的

jump
重命名为
jumpDog
,因为Dog将有它自己的继承类,我想对所有人使用
jump

flutter dart extension-methods
1个回答
0
投票

回答直接问题,您不能在扩展程序中使用

super
关键字。扩展并不是真正的类,因此也不是真正能够使用 super 关键字的子类。它更像是您可以添加到课程中的附加部分。

其次,即使你在扩展中使用

jump
关键字调用
this
方法(如以下代码所示),它也只会调用从
Dog
的超类派生的跳转方法。

extension DogExtension on Dog {
  void jump() {
    this.jump();
    print("and Waving Tail");
  }
}

这主要意味着 DogExtension 中的 Jump() 方法永远不会被调用。

如果你真的愿意重写 Dog 类的

jump
方法,你应该尝试考虑 mixin。

class Dog extends Animal with DogMixin {
  final String breed;

  Dog({required this.breed, required super.name});
}

mixin DogMixin {
  void jump() {
    print('and Waving Tail');
  }
}

void main(List<String> args) {
  final dog = Dog(breed: "Husky", name: "Tom");
  dog.jump();
}

现在

dog.jump()
调用将调用
DogMixin
中重写的方法。

希望这有帮助。

© www.soinside.com 2019 - 2024. All rights reserved.