1.静态成员
static修饰类中的变量或函数
静态方法不能访问非静态成员,非静态方法可以访问静态成员
可以通过类来访问
非静态的必须实例化以后访问
调用静态成员不需要通过this,因为this 相当于当前类的实例
访问非静态属性建议通过this.来调用
2.对象操作符
?条件运算符—基本不用
as 类型转换
is 类型判断
… 级联操作(连缀)—常用
1)? 定义了p,但是没new, 这是去调用类的方法会报错,
前面可以加?,表示如果为空就不调用
Person p;
p?.printInfo();
2)is类型判断
Person p=new Person(“杜甫”,33);
if(p is Person){
p.name=“杜牧”;
}
3)如下p1被多次赋值,可以用as进行规范
var p1;
p1=“hello”;
p1=new Person(“王维”, 66);
(p1 as Person).printInfo();
}
4)连缀操作
var p1=new Person("王维", 66);
p1 ..name="王安石"
..age=88
..printInfo();
继承
extends,不继承构造函数
访问父类里面可见的属性和方法
可以复写父类的getter和setter
1.注意:父类构造函数有参数时处理方法:通过super实现
class Person{
String name;
int age;
Person(this.name,this.age);
void printInfo(){
print("${this.name},${this.age}");
}
}
class Children extends Person{
//Children(super.name, super.age);
//将子类的构造函数的参数传递个父类
//类似于构造函数初始化类别Rect():height=20,width=10{}
Children(String name,int age):super(name,age);
}
void main(List<String> args) {
Children children=new Children("王莽",88);
children.printInfo();
}
子类增加方法
调用对象方法前,先在子类中自己的方法,没有再去父类找
class Person{
String name;
int age;
Person(this.name,this.age);
void printInfo(){
print("${this.name},${this.age}");
}
}
class Children extends Person{
String sex;
//Children(super.name, super.age);
//将子类的构造函数的参数传递个父类
//类似于构造函数初始化类别Rect():height=20,width=10{}
Children(String name,int age,this.sex):super(name,age);
void run() {
print("${this.name},${this.age},${this.sex}");
}
}
void main(List<String> args) {
Children children=new Children("王莽",88,"男");
children.run();
}
命名构造函数
父类:
Person(this.name,this.age);
Person.xxx(this.name,this.age);//命名构造函数
子类:
Children(String name,int age,this.sex):super.xxx(name, age);//给命名构造函数传参
覆写与super
@override //非必须,但建议
void printInfo(){
print("hello,${this.name},${this.age}");
}
void run() {
print("${this.name},${this.age},${this.sex}");
super.work();//在子类中调用父类方法
}