1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120
| void main() { Person person = Person('junech', 23); print(person.toString());
Student student = Student('北大', 'tom', 23); print(student.toString());
Student student1 = Student.cover(student); print('student1: ${student1.toString()}');
Student student2 = Student.stu(student); print('student2: ${student2.toString()}');
Logger logger1 = Logger(); Logger logger2 = Logger(); print('logger1 == logger2 ${logger1 == logger2}'); }
//都继承自Object class Person { String? name; int? age;
Person(this.name, this.age);
@override String toString() { return 'name: $name age:$age'; } }
//构造方法初始化列表 class Student extends Person { String? _school; String? city; String? county; String? funName;
//为私有变量设置 get/set方法 String? get school => _school;
set school(String? value) { _school = value; }
//构造方法: //this._school 初始化自有参数 //name,age 交给父类进行初始化 //city 为可选参数 //county 设为默认值 Student(this._school, String? name, int? age, {this.city, this.county = 'china'}) : funName = '$county.$city', super(name, age) { //构造方法体不是必须的 }
//命名构造方法: //类名 + . + 方法名 //通过命名构造方法可以为类实现多个构造方法 Student.cover(Student stu) : super(stu.name, stu.age) { print('命名构造方法'); }
//命名工厂构造方法: //factory 类名 . 方法名 //可以有返回值,而且不需要将类的final 变量作为参数,可以灵活获取类的对象 factory Student.stu(Student st) { return Student(st._school, st.name, st.age); }
@override String toString() { return 'name: $name age:$age school:$_school city:$city county:$county'; } }
//////////////////////////////////////////////////////////////// //抽象类: //1、不能实例化 //2、其作用用于定义接口 //3、抽象类中也有一些实现 abstract class Study { void study();
void study2() { print('抽象类'); } }
//抽象类既可以继承也可以实现 //实现的时候必须是实现抽象类中所有方法 class StudyFlutter extends Study { @override void study() {} }
class StudyDart implements Study { @override void study() {}
@override void study2() {} } ////////////////////////////////////////////////////////////////
//工厂构造方法 //单例 class Logger { static Logger? _cache;
factory Logger() { _cache ??= Logger._internal(); return _cache!; }
//是一个私有构造函数,用于在类内部创建 Logger 实例 Logger._internal(); }
|