1.静态成员
Dart中的静态成员:
1、使用static 关键字来实现类级别的变量和函数
2、静态方法不能访问非静态成员,非静态方法可以访问静态成员
class Person {
static String name = '张三';
int age=20;
static void show() {
print(name);
}
void printInfo(){ /*非静态方法可以访问静态成员以及非静态成员*/
// print(name); //访问静态属性
// print(this.age); //访问非静态属性
show(); //调用静态方法
}
static void printUserInfo(){//静态方法
print(name); //静态属性
show(); //静态方法
//print(this.age); //静态方法没法访问非静态的属性
// this.printInfo(); //静态方法没法访问非静态的方法
// printInfo();
}
}
//没有带static的时候,是先实例之后再调用。使用了static之后,直接用Person调用
// print(Person.name);
// Person.show();
// Person p=new Person();
// p.printInfo();
Person.printUserInfo();
2.对象操作符
Dart中的对象操作符:
? 条件运算符 (了解)
as 类型转换
is 类型判断
.. 级联操作 (连缀) (记住)
//公用代码:
class Person {
String name;
num age;
Person(this.name,this.age);
void printInfo() {
print("${this.name}---${this.age}");
}
}
//?条件运算符
//如果main函数中直接调用以下方法,肯定是报错的。因为p没有赋值,为空。printInfo这个方法不存在。
Person p;
p.printInfo();
//如果加上?,表示 如果为空的话,不会调用printInfo方法。也不会报错。
Person p;
p?.printInfo();
//is 类型判断
Person p = new Person('张三', 20);
if (p is Person) {//判断p对象是否属于Person类型
p.name = "李四";
} //打印结果 李四---20
//as 类型转换
var p1;
p1 = '';
p1 = new Person('张三1', 20); //在以前的版本的时候,这样写会报错
p1.printInfo();
(p1 as Person).printInfo(); //p1强制转换成Person
.. 级联操作 (连缀)
Person p1 = new Person('张三1', 20);
p1.printInfo();
p1.name = '张三222';
p1.age = 40;
p1.printInfo();
//使用.. 修改之后如下(效果一样):
Person p1=new Person('张三1', 20);
p1.printInfo();
p1..name="张三222"
..age= 40
..printInfo();
3.继承
Dart中的类的继承:
1、子类使用extends关键词来继承父类
2、子类会继承父类里面可见的属性和方法 但是不会继承构造函数
3、子类能复写父类的方法 getter和setter
class Person {
String name;
num age;
Person(this.name,this.age);
void printInfo() {
print("${this.name}---${this.age}");
}
}
class Web extends Person{
Web(String name, num age) : super(name, age){//super表示把实例化子类的时候,传入的name age赋值给Person构造函数
}
}
//在main函数中调用
Web w=new Web('张三', 12);
w.printInfo();
class Person {
String name;
num age;
Person(this.name,this.age);
void printInfo() {
print("${this.name}---${this.age}");
}
work(){
print("${this.name}在工作...");
}
}
class Web extends Person{
Web(String name, num age) : super(name, age);
run(){
print('run');
super.work(); //子类调用父类的方法
}
//覆写父类的方法
@override //可以写也可以不写 建议在覆写父类方法的时候加上 @override
void printInfo(){
print("姓名:${this.name}---年龄:${this.age}");
}
@override
work(){
print("${this.name}的工作是写代码");
}
}
//在main函数调用
Web w=new Web('李四',20);
w.printInfo();
w.work();
网友评论