Flutter for OpenHarmonyOS 前置知识:Dart语言详解(下)

个人主页:ujainu

前言

在前两一篇《Flutter for HarmonyOS 前置知识:Dart语言详解(中)》中,我们掌握了变量、数据类型、控制结构等核心语法。这些内容为你打下了坚实的基础。现在,我们将进入 Dart 的面向对象编程(OOP)世界,深入探讨类、继承、多态、混入等关键概念,并进一步学习 泛型 和 异步编程------这两者是构建高性能 Flutter 应用和 HarmonyOS 跨端能力不可或缺的利器。

无论你是准备深入 Flutter 开发,还是探索 HarmonyOS 的分布式能力,掌握这些进阶特性,都能让你写出更健壮、可维护、高性能的代码。本文将通过清晰的示例和实用场景,带你系统掌握 Dart 的进阶核心。

Dart 是一门纯面向对象语言,一切皆对象,所有值都是某个类的实例(包括数字、函数甚至 null)。类是封装数据(属性)和行为(方法)的基本单元。

类的公有属性和私有属性

在 Dart 中,没有 public、private 关键字 。属性或方法的可见性由其命名方式决定:

  • 以 _(下划线)开头的标识符:表示库内私有(library-private),仅在定义它的 .dart 文件中可见。
  • 不以下划线开头:默认为公有,可在任何地方访问。
dart 复制代码
// Dart私有和公有属性示例
class Person {
  // 公有属性
  String name;
  int age;
  // 私有属性
  String _id;
  String _phone;

  Person(this.name, this.age, String id, String phone) : 
    _id = id, _phone = phone;

  // 访问私有属性
  String getId() => _id;
  String getPhone() => _phone;

  // 修改私有属性
  void setPhone(String phone) {
    _phone = phone;
  }

  void info() {
    print("名字: $name, 年龄: $age");
    print("ID: $_id, 电话: $_phone");
  }
}

void main() {
  print("=== 私有和公有属性示例 ===");
  var p = Person("张三", 20, "12345", "13800138000");
  print("\n公有属性:");
  print("  名字: ${p.name}");
  print("  年龄: ${p.age}");
  print("\n私有属性:");
  print("  ID: ${p.getId()}");
  print("  电话: ${p.getPhone()}");
  print("\n修改电话:");
  p.setPhone("13900139000");
  print("  新电话: ${p.getPhone()}");
  print("\n全部信息:");
  p.info();
}

运行结果:

类的继承

Dart 支持单继承,使用 extends 关键字。子类可以继承父类的公有属性和方法,并可重写(override)它们。

dart 复制代码
// 父类
class Vehicle {
  String brand;
  Vehicle(this.brand);

  void start() {
    print(" $brand 车辆启动");
  }
}

// 子类
class ElectricCar extends Vehicle {
  int batteryCapacity;

  ElectricCar(String brand, this.batteryCapacity) : super(brand);

  @override
  void start() {
    print(" $brand 电动车启动,电池容量: ${batteryCapacity}kWh");
  }

  void charge() {
    print(" $brand 正在充电");
  }
}

void main() {
  var car = ElectricCar("鸿蒙智行", 100);
  car.start();  // 调用重写后的方法
  car.charge(); // 调用子类特有方法
}

运行结果:

类的多态

多态指同一接口,不同实现。在 Dart 中,通过父类引用指向子类实例,并调用被重写的方法来体现。

dart 复制代码
// 父类
class Vehicle {
  String brand;
  Vehicle(this.brand);

  void start() {
    print("$brand 车辆启动");
  }
}

// 子类
class ElectricCar extends Vehicle {
  int batteryCapacity;

  ElectricCar(String brand, this.batteryCapacity) : super(brand);

  @override
  void start() {
    print("$brand 电动车启动,电池容量: ${batteryCapacity}kWh");
  }
}

void testVehicle(Vehicle v) {
  v.start(); // 实际调用的是子类的 start 方法
}

void main() {
  var gasCar = Vehicle("燃油车");
  var elecCar = ElectricCar("电动车", 75);

  testVehicle(gasCar); // 输出:燃油车 车辆启动
  testVehicle(elecCar); // 输出:电动车 电动车启动,电池容量: 75kWh
}

运行结果:

多态让代码更具扩展性。未来新增 HybridCar,无需修改 testVehicle 函数。

类的混入

Dart 不支持多继承,但可通过 Mixin 实现"多继承"的效果。Mixin 是一种可复用的代码模块,可在多个类中组合使用。

dart 复制代码
// 定义 Mixin
mixin Flyable {
  void fly() {
    print("正在飞行");
  }
}

mixin Swimmable {
  void swim() {
    print("正在游泳");
  }
}

// 使用 Mixin
class Duck extends Animal with Flyable, Swimmable {
  @override
  void makeSound() {
    print("嘎嘎叫");
  }
}

class Animal {
  void makeSound() {
    print("动物发声");
  }
}

void main() {
  var duck = Duck();
  duck.makeSound(); // 来自 Animal
  duck.fly();       // 来自 Flyable
  duck.swim();      // 来自 Swimmable
}

运行结果:

Mixin 特别适合为类添加横向能力(如日志、缓存、网络状态监听等),避免类层次过深。

dart中的泛型

泛型(Generics)用于编写类型安全且可复用的代码。它允许你在定义类、方法或接口时,不指定具体类型,而是在使用时再确定。

泛型类示例

dart 复制代码
class Box<T> {
  T content;

  Box(this.content);

  T getContent() => content;

  void setContent(T newContent) {
    content = newContent;
  }
}

void main() {
  var stringBox = Box<String>("Hello Dart");
  var intBox = Box<int>(42);

  print(stringBox.getContent().runtimeType); // String
  print(intBox.getContent().runtimeType);    // int

  // stringBox.setContent(100); // ❌ 编译错误!类型不匹配
}

运行结果:

泛型方法

dart 复制代码
T firstElement<T>(List<T> list) {
  if (list.isEmpty) throw Exception("列表为空");
  return list[0];
}

void main() {
  var names = ["张三", "李四"];
  var scores = [90, 85];

  print(firstElement(names)); // 张三
  print(firstElement(scores)); // 90
}

运行结果:

泛型在 Flutter 中无处不在,如 List、Future、Stream 等。

dart中的异步编程

Dart 是单线程语言,但通过 事件循环(Event Loop)Future/Stream 模型实现高效的异步非阻塞 I/O。

Future:处理单次异步操作

dart 复制代码
Future<String> fetchData() async {
  await Future.delayed(Duration(seconds: 2)); // 模拟网络请求
  return "从 HarmonyOS 服务获取的数据";
}

void main() async {
  print("开始请求...");
  String data = await fetchData();
  print("收到数据:  $data");
  print("请求完成");
}

输出顺序:

Stream:处理多次异步事件

dart 复制代码
Stream<int> countStream(int to) async* {
  for (int i = 1; i <= to; i++) {
    await Future.delayed(Duration(seconds: 1));
    yield i;
  }
}

void main() {
  print("开始计数...");
  countStream(3).listen((number) {
    print("当前数字:  $number");
  });
  print("监听已启动");
}

输出:

结语

恭喜你!至此,你已经掌握了 Dart 语言的核心进阶特性:

  • 通过类、继承、多态、混入,构建清晰、可扩展的面向对象架构;
  • 利用泛型提升代码的类型安全性和复用性;
  • 借助 Future 和 Stream 高效处理异步任务,为 Flutter 动画、网络请求、HarmonyOS 分布式通信打下坚实基础。

这些能力不仅是 Dart 的精华,更是你通往 Flutter 高级开发HarmonyOS 生态融合 的关键桥梁。建议你动手实践每一个示例,尝试组合这些特性------比如创建一个带泛型的异步数据仓库类,或使用 Mixin 为设备类添加网络状态监听。

Dart 的旅程才刚刚深入,真正的跨平台魔法,正等着你去施展!

🌟 欢迎加入开源鸿蒙跨平台社区:开源鸿蒙跨平台开发者社区!

相关推荐
小雨青年2 小时前
【鸿蒙原生开发会议随记 Pro】 增删改查 封装一个优雅的 SQLite 数据库单例
数据库·sqlite·harmonyos
Easonmax2 小时前
零基础入门 React Native 鸿蒙跨平台开发:4——固定左侧列表格实现
react native·harmonyos
IT陈图图2 小时前
基于 Flutter × OpenHarmony 的跨端视频播放器数据模型设计实践
flutter·开源·鸿蒙·openharmony
大雷神2 小时前
HarmonyOS智慧农业管理应用开发教程--高高种地--第10篇:农事记录与操作管理
harmonyos
BlackWolfSky2 小时前
鸿蒙中级课程笔记2—状态管理V2—@ReusableV2装饰器:组件复用
笔记·华为·harmonyos
张小勇2 小时前
uniappx开发鸿蒙app调试证书和正式证书极速配置
华为·harmonyos
时光慢煮2 小时前
Flutter × OpenHarmony 跨端开发:实现排序与创建选项功能
flutter·华为·开源·openharmony
Miguo94well3 小时前
Flutter框架跨平台鸿蒙开发——养生APP的开发流程
flutter·华为·harmonyos·鸿蒙
雨季6663 小时前
构建交互式响应式页面:Flutter 在 OpenHarmony 上的动态 UI 实践
flutter·ui