7-2继承
Person.dart
class Person {
String name;
int age;
String birth;
bool get isAdult => age > 18;
void run() {
print('person run....');
}
}
class_extention.dart
import 'person.dart';
void main() {
var student = new Student();
student.study();
}
// 继承 可以访问继承对象中 可见的属性 和方法
class Student extends Person {
void study() {
print('student study...');
}
}
7-3继承中的构造方法
// 子类的构造方法 默认会调用父类中 无名无参的构造方法
// 如果父类没有无名无参的构造方法 则需要先是调用父类的构造方法
void main() {
var student = new Student('Tom');
// 获取父类中的名称
print(student.name);
}
class Person {
String name;
// 无名无参的构造方法
// Person(){
// print('person');
// }
// 无名有参
Person(this.name);
// 有名有参
Person.withName(this.name);
}
class Student extends Person {
int age;
final String gender;
// 子类调用父类的构造方法默认
// Student(String name):super(name);
// 子类调用父类的构造方法有名称
// Student(String name):super.withName(name);
// 初始化列表在构造方法前执行
Student(String name, String g)
: gender = g,
super.withName(name);
}
7-4抽象类
import 'dart:io';
import '../chapter6/baject_op.dart';
void main() {
var person = new Student();
person.run();
}
// 抽象类不能够被实例化 抽象方法不用使用abstract修饰 无实现
// 抽象类可以没有抽象方法
abstract class Person {
void run();
}
class Student extends Person {
@override
void run() {
print('run');
}
}
7-5接口
void main() {}
class Person {
String name;
int get age => 18;
void run() {
print('person run');
}
}
// 在dart中 类也是接口
// 如果是服用已有类的实现 使用继承 如果使用已有类的外在行为使用接口
// 所有的类都可以当做接口使用 建议使用抽象类作为接口
class Student implements Person {
@override
String name;
@override
int get age => 15;
@override
void run() {}
}
7-6Mixins
void main() {
var d = new D();
d.a();
}
class A {
void a() {
print('aaaa');
}
}
class B {
void b() {
print('bbbb');
}
}
class C {
void c() {
print('cccc');
}
}
// 使用mixins实现多继承 语法:lass D extends A with B,C
// B和C他也被称为mixins
// abc类都有a方法的话 会调用最后一个类中的a方法
// 作为 mixins的类不能有显示声明构造方法
// 作为mixins的类只能继承自object(不能继承已经有继承的类)
class D extends A with B, C {}
7-7操作符覆写
import '../chapter6/baject_op.dart';
void main() {
var person1 = new Person(18);
var person2 = new Person(20);
print(person1 > person2);
}
class Person {
int age;
Person(this.age);
// 复写操作符
bool operator >(Person person) {
return this.age > person.age;
}
}
8-1枚举
// const spring=0;
// const summer=1;
// const autumn=2;
// const winter=3;
void main() {
var currentseason = Season.spring;
print(currentseason.index);
switch (currentseason) {
// 枚举有index属性
// 不能指定index
// 不能添加方法
case Season.spring:
print('1-3月');
break;
case Season.summer:
print('4-6月');
break;
case Season.autumn:
print('7-9月');
break;
case Season.winter:
print('10-12月');
break;
}
}
// 枚举 是一种数据类型
enum Season { spring, summer, autumn, winter }
8-2泛型
void main() {
// 泛型可以限制参数类型new List<String>();
// 使用泛型可以避免代码重复
var list = new List<String>();
list.add('1');
// list.add(1);
}
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。