Android学Dart学习笔记第十八节 类-继承

继承

在dart中,和java一样,使用extends创建子类,使用super引用超类:

dart 复制代码
class Television {
  void turnOn() {
    _illuminateDisplay();
    _activateIrSensor();
  }
  // ···
}

class SmartTelevision extends Television {
  void turnOn() {
    super.turnOn();
    _bootNetworkInterface();
    _initializeMemory();
    _upgradeApps();
  }
  // ···
}

Overriding members

子类可以覆盖实例方法(包括操作符)、getter和setter。可以使用@override注解表示有意覆盖成员

dart 复制代码
class Television {
  // ···
  set contrast(int value) {
    // ···
  }
}

class SmartTelevision extends Television {
  @override
  set contrast(num value) {
    // ···
  }
  // ···
}

覆盖方法的声明必须在以下几个方面与它覆盖的方法匹配:

返回类型必须与被覆盖方法的返回类型相同(或为其子类型)。

形参类型必须与被覆盖方法的形参类型相同(或超类型)。在前面的例子中,智能电视的对比设置器将参数类型从int改为超类型num。

如果被覆盖的方法接受n个位置参数,那么覆盖的方法也必须接受n个位置参数。

泛型方法不能覆盖非泛型方法,非泛型方法也不能覆盖泛型方法。

noSuchMethod

当代码尝试使用不存在的方法或实例变量时,要检测或响应,你可以覆盖noSuchMethod():

dart 复制代码
class A {
  // Unless you override noSuchMethod, using a
  // non-existent member results in a NoSuchMethodError.
  @override
  void noSuchMethod(Invocation invocation) {
    print(
      'You tried to use a non-existent member: '
      '${invocation.memberName}',
    );
  }
}

"Dart 允许你调用不存在的方法,但必须有安全网:要么你明确告诉编译器'我不知道这是什么类型'(用 dynamic),要么你准备好'备用方案'(自定义 noSuchMethod())。"

如果不这么做,编译检查都过不了

相关推荐
学计算机的计算基3 分钟前
操作系统内存管理全解:虚拟内存、页表、COW、malloc、OOM一篇搞定
java·笔记·算法
AOwhisky10 分钟前
Python 学习笔记(第五期)——组合数据类型:列表、元组、集合与字典精讲——核心知识点自测与详解
开发语言·笔记·python·学习·云计算
砚凝霜11 分钟前
软考网络工程师|第 2 章 信道延迟、传输介质、数据编码、数字调制、PCM 完整备考笔记
网络·笔记·pcm
woshihuanglaoshi25 分钟前
数据迁移与版本管理 - Flutter在鸿蒙平台实现数据库升级策略
数据库·学习·flutter·华为·harmonyos·鸿蒙·鸿蒙系统
GitLqr10 小时前
玩转 WebSocket:从原理到 Flutter 实战
websocket·网络协议·flutter
世人万千丶10 小时前
参数管理_Flutter在鸿蒙平台路由参数最佳实践
学习·flutter·华为·harmonyos·鸿蒙
HLC++13 小时前
Linux的进程间通信
android·linux·服务器
遇乐的果园13 小时前
前端学习笔记-vue加载渲染优化
前端·笔记·学习
遇乐的果园15 小时前
前端学习笔记-vue状态管理优化
前端·笔记·学习
从零开始的代码生活_15 小时前
C++ 继承详解:访问控制、对象模型、菱形继承与设计取舍
开发语言·c++·后端·学习·算法