类的静态成员_操作符_继承
类的静态成员/操作符/继承
类的静态成员_操作符_继承
类的静态成员/操作符/继承
静态成员 - 属性/方法
- 使用static关键字来实现类级别的变量和函数
1
2
3
4
5
6
7
8
9
10
11
class Person {
static String name = '张三';
static void show() {
print(name);
}
}
main() {
print(Person.name); // 张三
Person.show(); // 张三
}
- 静态方法不能访问非静态成员,非静态方法可以访问静态成员或非静态成员
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
class Person {
// 静态属性
static String name = '张三';
// 非晶态属性
int age = 20;
// 静态方法
static void show1() {
// 访问静态属性
print(name);
// 不能访问非静态属性
print(this.age); // 报错
}
// 非静态方法 - 可以访问静态成员或非静态成员
void show2() {
// 访问静态属性
print(name);
// 访问非静态属性
print(this.age);
// 调用静态方法
show1();
}
}
main() {
print(Person.name); // 张三
Person.show1(); // 张三
Person p = new Person();
p.show2();
}
对象操作符
?条件运算符
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
class Person {
String name = '';
num age = 0;
Person(this.name, this.age);
void getInfo() {
print('${this.name},${this.age}');
}
}
main() {
Person p;
p?.getInfo();
}
as类型转换
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
class Person {
String name = '';
num age = 0;
Person(this.name, this.age);
void getInfo() {
print('${this.name},${this.age}');
}
}
main() {
var p;
p = '';
// 老版本中会报错
p = new Person('张三', 20);
(p as Person).getInfo(); // 张三,20
}
is类型判断
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
class Person {
String name = '';
num age = 0;
Person(this.name, this.age);
void getInfo() {
print('${this.name},${this.age}');
}
}
main() {
Person p = new Person('张三', 20);
if(p is Person) {
p.name = '李四';
p.getInfo(); // 李四,20
}
}
**..**** 级联操作(连缀) !!!**
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
class Person {
String name;
num age;
Person(this.name, this.age);
void getInfo() {
print('${this.name},${this.age}');
}
}
main() {
Person p = new Person('张三', 20);
p..name = '李四'
..age = 30
..getInfo(); // 李四,30
// 等同于
p.name == '李四';
p.age == 30;
p.getInfo();
}
继承
- 子类使用
extends关键字来继承父类 - 子类会继承父类里面可见的属性和方法,但是不会继承构造函数
- 子类能复写父类方法 getter/setter
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
class Person {
String name = '张三';
num age = 20;
Person(this.name, this.age);
void getInfo() {
print('${this.name},${this.age}');
}
}
class Man extends Person {
}
main() {
Man m = new Man();
print(m.name); // 张三
m.getInfo(); // 张三,20
}
super 关键字的使用
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
class Person {
String name;
num age;
Person(this.name, this.age);
void getInfo() {
print('${this.name},${this.age}');
}
}
class Man extends Person {
Man(String name, num age) : super(name, age);
}
main() {
Man m = new Man('张三', 20);
print(m.name); // 张三
m.getInfo(); // 张三,20
}
子类扩展自己的属性和方法:
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
class Person {
String name;
num age;
Person(this.name, this.age);
void getInfo() {
print('${this.name},${this.age}');
}
}
class Man extends Person {
var sex;
Man(String name, num age, String sex) : super(name, age) {
this.sex = sex;
}
run() {
print('${this.name},${this.age},${this.sex}');
}
}
main() {
Man m = new Man('张三', 20, '男');
m.run(); // 张三,20,男
}
命名构造函数传参:
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
class Person {
String name;
num age;
Person(this.name, this.age);
// 命名构造函数
Person.xxx(this.name, this.age);
void getInfo() {
print('${this.name},${this.age}');
}
}
class Man extends Person {
var sex;
Man(String name, num age, String sex) : super.xxx(name, age) {
this.sex = sex;
}
run() {
print('${this.name},${this.age},${this.sex}');
}
}
main() {
Man m = new Man('张三', 20, '男');
m.run(); // 张三,20,男
}
复写父类的方法:@override
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
class Person {
String name;
num age;
Person(this.name, this.age);
void getInfo() {
print('${this.name},${this.age}');
}
work() {
print('${this.name}在工作');
}
}
class Man extends Person {
Man(String name, num age) : super(name, age);
run() {
print('run');
// 在子类中调用父类
super.work();
}
// 复写父类的方法
// 建议写上 @override
@override
void getInfo() {
print('姓名:${this.name},年龄:${this.age}');
}
@override
work() {
print('${this.name}的工作是写代码');
}
}
main() {
Man m = new Man('张三', 20);
m.getInfo(); // 姓名:张三,年龄:20
m.work(); // 张三的工作是写代码
m.run(); // 张三在工作
}
本文由作者按照 CC BY 4.0 进行授权