Dart中静态方法无法重写,但代码运行无报错?求原因
Dart中静态方法同名不报错的原因:不是重写,是隐藏
你看到的子类定义同名静态方法的行为,不是重写(override),而是静态方法的隐藏(hide),这是Dart允许的行为,所以不会触发报错。
核心区别:
- 重写是针对实例方法的运行时多态特性:子类重写父类实例方法后,调用时会根据对象的实际类型(而非声明类型)执行对应的方法,可用
@override注解标记(推荐)。 - 静态方法属于类本身,绑定是编译期确定的:调用
DartStudent.getDetails()时,编译器直接查找DartStudent类中定义的静态方法,和父类Student的同名静态方法没有继承上的重写关系,只是各自独立的方法。
验证:尝试用@override注解标记静态方法
如果给子类的静态方法加上@override注解,Dart编译器会直接报错,证明这不属于重写:
class Student { static void getDetails() { print('Get details method of Student class'); } } class DartStudent extends Student { @override // 编译器报错:The annotation 'override' is not applicable to this declaration static void getDetails() { print('Get details method of DartStudent class'); } }
对比实例方法的重写
如果是实例方法,重写会体现运行时多态:
class Student { void getDetails() { print('Get details method of Student class'); } } class DartStudent extends Student { @override void getDetails() { print('Get details method of DartStudent class'); } } void main() { Student s = DartStudent(); s.getDetails(); // 输出:Get details method of DartStudent class }
内容的提问来源于stack exchange,提问作者practicebug
相关产品推荐
相关产品推荐

