目录
Dart 类中的静态成员 静态方法
Dart中的静态成员:
1、使用static 关键字来修饰的变量和函数就称为静态属性或函数
2、静态方法不能访问非静态成员,非静态方法可以访问静态成员
class Person {
//用static修饰的就是静态成员
static String name = '张三';
static void show() {
print(name);
}
}
main(){
//调用静态方法或属性的时候,不能用实例化一个对象来调用
//而是直接通过类名.属性或类名.方法名()的形式来访问
print(Person.name);
Person.show();
}
对于静态方法不能访问非静态成员,非静态方法可以访问静态成员的理解:
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();
}
}
main(){
//调用静态的属性和方法
print(Person.name);
Person.show();
//调用非静态的属性和方法
Person p=new Person();
p.printInfo();
Person.printUserInfo();
}
Dart中的对象操作符
? 条件运算符 (了解)
as 类型转换
is 类型判断
.. 级联操作 (连缀) (记住)
class Person {
String name;
num age;
Person(this.name,this.age);
void printInfo() {
print("${this.name}---${this.age}");
}
}
main(){
//------?.条件运算符的使用
Person p; //在这里定义一个变量p,没有对它进行初始化
p.printInfo(); //若直接使用p.printInfo时,就会报错
p?.printInfo(); //但是加上?号以后,就不会报错,此时表示,若p为空则不执行后面的方法
Person p=new Person('张三', 20);//给p赋值以后
p?.printInfo(); //此时就可以正常打印:张三---20
//------is类型判断的使用
if(p is Person){ //判断p是不是属于Person类
p.name="李四";
}
p.printInfo();
print(p is Object);//输出结果:true,因为dart中所有类都是object的子类
//------as类型转换的使用
var p1;
p1 = Person('张三1', 20);
(p1 as Person).printInfo();//将p1强制转化成Person类型,可防止程序运行出错
.. 级联操作 (连缀) 使用的比较多的一种操作:
Person p1=new Person('张三1', 20);
p1.printInfo();//输出结果:张三1---20
/*级联操作示例*/
p1..name="李四"
..age=30
..printInfo();//输出结果:李四---30
面向对象的三大特性:封装 、继承、多态
Dart中的类的继承:
1、子类使用extends关键词来继承父类
2、子类会继承父类里面可见的属性和方法 但是不会继承构造函数
3、子类能复写父类的方法 getter和setter
class Person {
String name='张三';
num age=20;
void printInfo() {
print("${this.name}---${this.age}");
}
}
class Web extends Person{
}
main(){
Web w=new Web();
print(w.name);
w.printInfo();//虽然Web类什么都没做,但是依然可以打印出来张三---20
}
super关键词的使用
class Web extends Person{
//根据系统提示,会自动生成下面语句
//因为构造函数不能被继承,所以这里创建了web类的构造函数
//通过super关键字把值付给父类
Web(String name, num age) : super(name, age){
}
}
当然Web类继承Person后,还可以写自己的属性和方法。如:
class Web extends Person{
//除了父类的两个属性,还可以直接添加自己的属性,sex
String sex;
Web(String name, num age,String sex) : super(name, age){
this.sex = sex
}
//还可以写自己的方法
printWebInfo(){
print("${this.name}---${this.age}---${this.sex}");
}
}
main(){
//在实例化的时候也要传入三个参数
Web w=new Web('张三', 12,'男');
w.printInfo();//输出结果:张三---12
w.printWebInfo();//输出结果:张三---12---男
}
在子类里面,不仅可以继承父类,扩展父类,还可以复写父类的方法
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');
}
//覆写父类的方法
@override //可以写也可以不写 建议在覆写父类方法的时候加上 @override
void printInfo(){
print("姓名:${this.name}---年龄:${this.age}");
}
@override
work(){
print("${this.name}的工作是写代码");
}
}
main(){
Web w=new Web('李四',20);
//执行的时候会优先找子类里的方法,没有才会执行父类里的方法
w.printInfo();
w.work();
}
子类里面调用父类的方法
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(); //自类调用父类的方法,通过super关键字调用
}
}
main(){
Web w=new Web('李四',20);
w.printInfo();
w.run();输出结果:run 李四在工作
}
Dart中的抽象类 多态 以及接口
Dart中的抽象类
Dart抽象类主要用于定义标准,子类可以继承抽象类,也可以实现抽象类接口。
1、抽象类通过abstract 关键字来定义
2、Dart中的抽象方法不能用abstract声明,Dart中没有方法体的方法我们称为抽象方法。
3、如果子类继承抽象类,必须得实现里面的抽象方法
4、如