面向对象
三大特征(编程思想):封装、继承、多态
定义一个类
定一个Dart类,所有类都继承自Object
shell
class Person {
String? name;
int? age;
Person(this.name, this.age);
///重写父类方法
@override
String toString() {
return 'name:$name, age:$age';
}
}使用这个类
shell
void main() {
//请看控制台输出
Person person = Person('Jack', 19);
print(person.toString());
}继承
shell
class Student extends Person {
//定义类的变量
String? _school; //通过下划线来标识私有字段(变量)
String? city;
String? country;
String? fullName;
static Student? instance;
///构造方法:
///通this.school初始化自有参数
///name,age交给父类进行初始化
///city为可选参数
///country设有默认参数
Student(this._school, String? name, int? age,
{this.city, this.country = 'China'})
///初始化列表:除了调用父类构造器,在子类构造器方法体之前,你也可以初始化实例变量,不同的初始化变量之间用逗号分隔开
: fullName = '$country.$city',
///如果父类没有默认构造方法(无参构造方法),则需要在初始化列表中调用父类构造方法进行初始化
super(name, age) {
///构造方法体不是必须的
}
//命名构造方法:[类名+.+方法名]
//使用命名构造方法为类实现多个构造方法
// Student student1 = Student.cover(student, '211');
Student.cover(Student stu, this._school) : super(stu.name, stu.age) {
print('命名构造方法');
}
//命名工厂构造方法:factory [类名+.+方法名]
//它可以有返回值,而且不需要将类的final变量作为参数,是提供一种灵活获取类对象的方式。
factory Student.stu(Student stu) {
return Student(stu._school, stu.name, stu.age,
city: stu.city, country: stu.country);
}
@override
String toString() {
return 'name:$name school:$_school,city:$city,country:$country ${super.toString()}';
}
//可以为私有字段设置getter来让外界获取到私有字段
String? get school => _school;
//可以为私有字段设置setter来控制外界对私有字段的修改
set school(String? value) {
_school = value;
}
//静态方法
static doPrint(String str) {
print('doPrint:$str');
}
///科普小知识:实例方法,对象的实例方法可以访问到实例变量与this,如上述代码中的toString
}
剑鸣秋朔