void main() {
// 使用默认构造函数
var p = Person("Alice", 20);
p.introduce();
// 使用 setter 修改年龄
p.age = 25;
print("修改后年龄: ${p.age}");
// 使用命名构造函数
var p2 = Person.fromBirthYear("Bob", 2000);
p2.introduce();
// 子类 Student
var s = Student("Charlie", 18, "S12345");
s.introduce();
s.study();
}
// ===============================
// 父类 Person
// ===============================
class Person {
String name;
int _age; // 私有字段(文件内可访问)
// 默认构造函数
Person(this.name, this._age);
// 命名构造函数:通过出生年份计算年龄
Person.fromBirthYear(this.name, int birthYear)
: _age = DateTime.now().year - birthYear;
// getter
// 让外部代码可以像访问属性一样读取 _age
int get age => _age;
// setter(带简单校验)
set age(int value) {
if (value > 0) {
_age = value;
}
}
// 方法
void introduce() {
print("我叫 $name,今年 $age 岁");
}
}
// ===============================
// 子类 Student 继承 Person
// ===============================
class Student extends Person {
String studentId;
// 子类构造函数必须调用父类构造
Student(String name, int age, this.studentId) : super(name, age);
// 子类新增方法
void study() {
print("$name 正在学习中...");
}
// 重写父类方法
@override
void introduce() {
print("我是学生 $name,年龄 $age,学号 $studentId");
}
}