Dart类继承用法

使用extends 指定要继承父类,使用super引用父类对象

class Parent {
  void show() {
    print('Parent show');
  }
}

class Children extends Parent {
  @override
  void show() {
    super.show();
    print('Children show');
  }

  @override
  void noSuchMethod(Invocation invocation) {
    print('Children nosuchmethod ${invocation.memberName}');
  }
}

final obj = Children();
obj.show(); 
// 输出
// Parent Show
// Children show

子类可以重写父类的实例方法,getter,setter方法,使用@override 注释表明要重写函数,重写函数必须完全匹配父类的方法定义,包括返回类型,参数类型,参数个数等

noSuchMethod

子类可以重写noSuchMethod来检测对不存在方法或者变量的访问,用法如下

class Children extends Parent {
  @override
  void noSuchMethod(Invocation invocation) {
    print('Children nosuchmethod ${invocation.memberName}');
  }
}

正常情况下,是无法直接调用类不存在的方法或者变量的,除非:

调用对象的类型为dyanmic,类似如下

dynamic obj = Children();
obj.showName();

// 由于children没有showName这个方法,所以会触发noSuchMethod的调用

留下评论

您的电子邮箱地址不会被公开。 必填项已用 * 标注