我收到以下错误
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
。
回答直接问题,您不能在扩展程序中使用
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
中重写的方法。
希望这有帮助。