Dart 虚函数(int)是';t无效函数的有效覆盖(动态) 类父类{ void方法(T){} } 类子级扩展父级{ @凌驾 void方法(inti){}//错误:如下所述 空取动态(动态d){ takesType(d);//没有错误 } 无效的takesType(int i){ takesDynamic(i);//无错误 } }

Dart 虚函数(int)是';t无效函数的有效覆盖(动态) 类父类{ void方法(T){} } 类子级扩展父级{ @凌驾 void方法(inti){}//错误:如下所述 空取动态(动态d){ takesType(d);//没有错误 } 无效的takesType(int i){ takesDynamic(i);//无错误 } },dart,Dart,错误: 无效函数(int)不是无效函数(动态)的有效重写 当我可以在方法参数中轻松地将int传递给dynamic,反之亦然时,为什么我会在重写方法时看到错误 附言: 我不是在寻找一种解决方案,即使用extensedparent并使其正常工作,我想知道为什么在重写方法和调用常规方法时会有不同的处理方式 void Function(int x)通常不是void Function(dynamic x)的有效覆盖,因为int版本不能替代dynamic版本 父方法的允许输入是什么?什么都行 允许对子方法

错误:

无效函数(int)不是无效函数(动态)的有效重写

当我可以在方法参数中轻松地将
int
传递给
dynamic
,反之亦然时,为什么我会在重写方法时看到错误


附言:

我不是在寻找一种解决方案,即使用
extensedparent
并使其正常工作,我想知道为什么在重写方法和调用常规方法时会有不同的处理方式

void Function(int x)
通常不是
void Function(dynamic x)
的有效覆盖,因为
int
版本不能替代
dynamic
版本

父方法的允许输入是什么?什么都行

允许对子方法
输入哪些内容?只需
int
s

因此,这样的覆盖可能会违反
父接口的约定。(例如,如果您有一个
Child
的实例,并将其传递给期望的
Parent
对象,然后该对象在其上调用
方法(“非int”)
,该怎么办?)

(请注意,这并不特定于方法重写。一般来说,如果预期使用较宽类型的函数,则不能使用较窄类型的函数,,即使较窄类型派生自较宽类型。)

Dart确实允许您使用来抑制静态类型错误并显式允许重写,但请注意,这样做并不一定是类型安全的,您将负责确保在运行时不会出现类型错误

进一步阅读:

void Function(int x)
通常不是
void Function(dynamic x)
的有效覆盖,因为
int
版本不能替代
dynamic
版本

父方法的允许输入是什么?什么都行

允许对子方法
输入哪些内容?只需
int
s

因此,这样的覆盖可能会违反
父接口的约定。(例如,如果您有一个
Child
的实例,并将其传递给期望的
Parent
对象,然后该对象在其上调用
方法(“非int”)
,该怎么办?)

(请注意,这并不特定于方法重写。一般来说,如果预期使用较宽类型的函数,则不能使用较窄类型的函数,,即使较窄类型派生自较宽类型。)

Dart确实允许您使用来抑制静态类型错误并显式允许重写,但请注意,这样做并不一定是类型安全的,您将负责确保在运行时不会出现类型错误

进一步阅读:

class Parent<T> {
  void method(T t) {}
}

class Child extends Parent {
  @override
  void method(int i) {} // error: mentioned_below

  void takesDynamic(dynamic d) {
    takesType(d); // no error
  }

  void takesType(int i) {
    takesDynamic(i); // no error
  }
}