🎬 HoRain云小助手:个人主页
🔥 个人专栏: 《Linux 系列教程》《c语言教程》
⛺️生活的理想,就是为了理想的生活!
⛳️ 推荐
前些天发现了一个超棒的服务器购买网站,性价比超高,大内存超划算!忍不住分享一下给大家。点击跳转到网站。
专栏介绍
专栏名称 | 专栏介绍 |
《C语言》 | 本专栏主要撰写C干货内容和编程技巧,让大家从底层了解C,把更多的知识由抽象到简单通俗易懂。 |
《网络协议》 | 本专栏主要是注重从底层来给大家一步步剖析网络协议的奥秘,一起解密网络协议在运行中协议的基本运行机制! |
《docker容器精解篇》 | 全面深入解析 docker 容器,从基础到进阶,涵盖原理、操作、实践案例,助您精通 docker。 |
《linux系列》 | 本专栏主要撰写Linux干货内容,从基础到进阶,知识由抽象到简单通俗易懂,帮你从新手小白到扫地僧。 |
《python 系列》 | 本专栏着重撰写Python相关的干货内容与编程技巧,助力大家从底层去认识Python,将更多复杂的知识由抽象转化为简单易懂的内容。 |
《试题库》 | 本专栏主要是发布一些考试和练习题库(涵盖软考、HCIE、HRCE、CCNA等) |
目录
⛳️ 推荐
专栏介绍
一、继承机制
1. 单继承实现
2. 构造函数的继承规则
3. 方法重写
二、多态的实现
1. 核心表现
2. 类型安全约束
3. 抽象类与接口的作用
三、与多继承相关的补充
1. Mixin 混入机制
2. covariant 协变参数
关键总结
Dart 中的继承与多态是面向对象编程的核心特性,继承通过extends关键字实现单继承,子类可复用父类属性和方法;多态则表现为父类引用可指向子类对象,并在运行时动态调用子类重写的方法。Dart 作为强类型语言(自 Dart 2.0 起),其多态实现依赖于健全的类型系统,确保类型安全的同时支持灵活的代码扩展。
一、继承机制
1. 单继承实现
- Dart仅支持单继承,子类通过
extends关键字继承父类,子类会继承父类所有可见的属性和方法,但不继承构造函数。 - 示例:
class Animal { void speak() => print("Animal sound"); } class Dog extends Animal { @override void speak() => print("Bark!"); // 重写父类方法 }
2. 构造函数的继承规则
- 子类必须显式调用父类构造函数(通过
super),若父类无参构造函数存在,Dart 会自动调用;否则需手动指定。 - 示例:
class Animal { String name; Animal(this.name); // 父类有参构造 } class Dog extends Animal { Dog(String name) : super(name); // 必须显式调用 }
3. 方法重写
- 子类通过
@override注解显式重写父类方法,强制要求方法签名一致(Dart 2.0 后类型检查更严格)。 - 若需调用父类原方法,使用
super.methodName()。
二、多态的实现
1. 核心表现
- 父类引用可指向子类对象,运行时根据实际对象类型动态调用对应方法,这是多态的核心特征。
- 示例:
Animal myPet = Dog(); // 父类引用指向子类实例 myPet.speak(); // 输出 "Bark!"(动态绑定到 Dog 的实现)
2. 类型安全约束
- Dart 是强类型语言,多态调用时只能访问父类声明的成员,子类特有方法需通过类型转换才能调用。
- 例如:
Animal animal = Dog(); animal.speak(); // 合法(父类方法) // animal.run(); // 编译错误:Animal 未定义 run 方法 (animal as Dog).run(); // 需显式类型转换
3. 抽象类与接口的作用
- 抽象类(
abstract class)定义规范,强制子类实现抽象方法,无法被实例化。abstract class Animal { void eat(); // 抽象方法 } class Dog extends Animal { @override void eat() => print("Eating bones"); } - 接口:Dart 中任意类均可作为接口,通过
implements实现,必须重写接口中所有方法。
三、与多继承相关的补充
1. Mixin 混入机制
- 为弥补单继承限制,Dart 提供
mixin混入,允许在多个类中复用代码,避免菱形问题。 - 示例:
mixin Flyable { void fly() => print("Flying"); } class Bird with Flyable {} // 混入 Flyable 能力
2.covariant协变参数
- 当子类需缩小方法参数类型时(如父类参数为
Animal,子类改为Dog),需用covariant标记参数以通过类型检查。class Animal { void feed(Animal food) {} } class Dog extends Animal { @override void feed(covariant Dog food) {} // 缩小参数类型 }
关键总结
- 单继承 + 多态:Dart 通过单继承实现代码复用,多态依赖父类引用指向子类对象的动态绑定机制。
- 类型安全优先:Dart 2.0 后的强类型系统确保多态调用时类型错误在编译期暴露,减少运行时风险。
- 扩展性设计:抽象类、接口和 Mixin 共同解决单继承限制,抽象类定义行为规范,Mixin 提供功能复用。
- 重写需显式标注:
@override是 Dart 的强制要求,避免意外覆盖父类方法。
以上机制使 Dart 在保持类型安全的同时,支持灵活的面向对象设计,尤其适合 Flutter 等大型应用开发。
❤️❤️❤️本人水平有限,如有纰漏,欢迎各位大佬评论批评指正!😄😄😄
💘💘💘如果觉得这篇文对你有帮助的话,也请给个点赞、收藏下吧,非常感谢!👍 👍 👍
🔥🔥🔥Stay Hungry Stay Foolish 道阻且长,行则将至,让我们一起加油吧!🌙🌙🌙