《Flutter for OpenHarmony:Dart 语言入门与实战指南下》
在 Dart 中,使用class关键字定义类,包含属性和方法。int age;// 构造函数// 方法print("我是nameint age;// 构造函数 User(this . name , this . age);// 方法 void introduce() {print("我是 $ name ,今年 $ age 岁");// 使用 var user = User("Xuqing" , 2
在上一篇文章《Flutter for OpenHarmony:Dart 语言入门与实战指南上》中,我们掌握了 Dart 的基础语法、变量类型以及函数定义。今天,我们将进入 Dart 语言的进阶核心——面向对象编程(OOP)。在 Flutter 和 OpenHarmony 的开发中,Widget 本质上就是对象,因此深入理解类、继承、混入和异步机制,是写出高质量跨平台应用的关键。
1. 类与对象
Dart 是一门纯面向对象的语言,所有东西都是对象。定义类是封装数据和行为的基础。
1.1 Dart中类的定义
在 Dart 中,使用 class 关键字定义类,包含属性和方法。
class User {
String name;
int age;
// 构造函数
User(this.name, this.age);
// 方法
void introduce() {
print("我是$name,今年$age岁");
}
}
void main(List<String> args) {
// 使用
var user = User("Xuqing", 22); // 实例化并初始化
user.introduce(); // 输出:我是Xuqing,今年22岁
print(user.name); // 输出:Xuqing
print(user.age); // 输出:22
}

1.2 Dart中类的默认构造函数
如果没有显式定义构造函数,Dart 会提供一个无参的默认构造函数。但通常我们需要在创建对象时初始化属性。
class Person
{
String name;
int age;
// 默认构造函数,显式写出来
Person(String name, int age)
: this.name = name, // this.name 指成员变量,name 指参数
this.age = age {
}
// 方法:自我介绍
void introduce()
{
print("我是$name,今年$age岁");
}
// 方法:获取年龄描述
String getAgeDescription() {
if (age < 18) {
return "未成年人";
} else if (age < 60) {
return "成年人";
} else {
return "老年人";
}
}
}
void main(List<String> args)
{
// 测试默认构造函数
var person1 = Person("Xuqing", 22);
person1.introduce();
print("年龄描述:${person1.getAgeDescription()}");
print("姓名:${person1.name}");
print("年龄:${person1.age}");
}

1.3Dart中类的命名构造函数
由于 Dart 不支持函数重载,我们使用命名构造函数来提供多种初始化方式,例如从 JSON 创建对象。
class Person {
String name;
int age;
// 命名构造函数
Person.fromJson(Map<String, dynamic> json)
: name = json['name'],
age = json['age'] {
}
// 方法:自我介绍
void introduce() {
print("我是$name,今年$age岁");
}
// 方法:获取年龄描述
String getAgeDescription() {
if (age < 18) {
return "未成年人";
} else if (age < 60) {
return "成年人";
} else {
return "老年人";
}
}
}
// 测试命名构造函数
void main(List<String> args) {
var jsonData = {'name': 'LiHua', 'age': 30};
var person2 = Person.fromJson(jsonData);
person2.introduce();
print("年龄描述:${person2.getAgeDescription()}");
}

1.4Dart中类构造函数的语法糖写法
Dart 提供了简洁的语法糖,直接在参数前加 this. ,省去赋值步骤。
class Person {
String name;
int age;
// 使用语法糖,一行代码替代了声明和赋值
Person(this.name, this.age);
// 方法:自我介绍
void introduce() {
print("我是$name,今年$age岁");
}
// 方法:获取年龄描述
String getAgeDescription() {
if (age < 18) {
return "未成年人";
} else if (age < 60) {
return "成年人";
} else {
return "老年人";
}
}
}
void main(List<String> args) {
// 测试默认构造函数
var person1 = Person("Xuqing", 22);
person1.introduce();
print("年龄描述:${person1.getAgeDescription()}");
print("姓名:${person1.name}");
print("年龄:${person1.age}");
}

1.5类的公有属性和私有属性
Dart 中没有 public 或 private 关键字。下划线 _ 开头的变量或方法即为私有,仅在库内可见。
class BankAccount {
double balance = 0;
String _password = "123456"; // 私有属性,外部无法直接访问
// 公有方法用于操作私有属性
void deposit(double amount) {
balance += amount;
}
// 方法:获取余额
double getBalance() {
return balance;
}
}
void main(List<String> args) {
// 验证 BankAccount 类
var account = BankAccount();
print("初始余额: ${account.getBalance()}");
account.deposit(100.50);
print("存款后余额: ${account.getBalance()}");
account.deposit(50.25);
print("再次存款后余额: ${account.getBalance()}");
// 注意:无法直接访问 _password 属性
// print(account._password); // 这行代码会报错
}

2. 继承与多态:代码复用与扩展
2.1Dart中类的继承
使用 extends 关键字实现继承,子类可以拥有父类的属性和方法。
class Animal {
void eat() {
print("Animal is eating");
}
}
class Dog extends Animal {
void bark() {
print("Woof!");
}
}
void main() {
var dog = Dog();
dog.eat(); // 继承自 Animal
dog.bark(); // Dog 自己的方法
}

2.2Dart中类的多态
多态允许子类重写父类的方法,实现不同的行为。
class Animal {
void makeSound() {
print("Some generic sound");
}
}
class Cat extends Animal {
void makeSound() {
print("Meow"); // 重写父类方法
}
}
void main() {
var animal = Animal();
animal.makeSound();
var cat = Cat();
cat.makeSound();
}

2.3Dart中类的多态-抽象和接口实现
Dart 使用 abstract 关键字定义抽象类,强制子类实现特定方法(类似接口)。
abstract class Shape {
void draw(); // 抽象方法,没有方法体
}
class Circle implements Shape { // 或者使用 extends
void draw() {
print("Drawing a Circle");
}
}
void main() {
var circle = Circle();
circle.draw();
}

3. 高级特性:混入与泛型
3.1Dart中类的混入
为了解决单继承的限制,Dart 引入了 Mixin(混入),允许在多个类层次结构之外复用代码。
mixin Flyable {
void fly() {
print("I can fly!");
}
}
class Bird {
void eat() => print("Eating...");
}
// with 关键字混入 Flyable 的能力
class Parrot extends Bird with Flyable {}
void main() {
var parrot = Parrot();
parrot.eat(); // 来自 Bird
parrot.fly(); // 来自 Flyable
}

3.2Dart中的泛型
泛型允许我们创建可重用的组件,这些组件可以处理多种数据类型,同时保证类型安全。
// 定义一个泛型类 Box,可以装任何类型的东西
class Box<T> {
T content;
Box(this.content);
}
void main() {
var intBox = Box<int>(10); // 装整数的盒子
print(intBox.content); // 使用变量,避免未使用警告
var strBox = Box<String>("Hello"); // 装字符串的盒子
print(strBox.content); // 使用变量,避免未使用警告
// var wrongBox = Box<int>("Hello"); // 编译报错,类型不匹配
}

4. 异步编程:非阻塞IO
4.1Dart中的异步编程
在移动开发中,网络请求不能阻塞主线程。Dart 使用 Future 和 async/await 处理异步操作。
// 模拟一个耗时的网络请求
Future<String> fetchData() async {
await Future.delayed(Duration(seconds: 2)); // 模拟延迟
return "Data from server";
}
// 使用 async/await 调用异步函数
void main() async {
print("Loading...");
String data = await fetchData(); // 等待结果,但不阻塞UI
print(data); // 2秒后输出:Data from server
}

5.结语
至此,我们完成了 Dart 语言核心部分的学习。从类的定义到复杂的异步处理,这些知识是构建 Flutter 和 OpenHarmony 应用的骨架。建议大家动手实践这些代码,理解面向对象的设计思想,这将为你后续的跨平台开发之路打下坚实的基础。谢谢大家观看,有不足之处请见谅。
欢迎加入开源鸿蒙跨平台社区: https://openharmonycrossplatform.csdn.net
更多推荐



所有评论(0)