9.Dart中的类 静态成员 操作符 类的继承
1.类中的静态成员 静态方法
1)使用static 关键字来实现类级别的变量和函数
2)静态方法不能访问非静态成员,非静态方法可以访问静态成员
class Person {
//非静态属性、方法
// String name = '张三';
// void show() {
// print(name);
// }
//非静态属性、方法
static String name = '张三';
static void show() {
print(name);
}
}
main(){
// var p= new Person();
// print(p.name);
// p.show();
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();
}
}
void main(){
Person p=new Person();
p.printInfo(); //调用非静态方法
Person.printUserInfo(); //调用静态方法
}
2.Dart 中的对象操作符
Dart中的对象操作符:
? 条件运算符 (了解)
as 类型转换
is 类型判断
.. 级联操作 (连缀) (记住)
1)? 条件运算符
class Person {
String name;
num age;
Person(this.name,this.age);
void printInfo() {
print("${this.name}---${this.age}");
}
}
void main(){
// Person p;
// p?.printInfo(); //如果p位空,则不调用printInfo方法
Person p=new Person('张三', 20);
p?.printInfo(); //如果p不为空,则调用printInfo方法
}
2) as 类型转换
class Person {
String name;
num age;
Person(this.name,this.age);
void printInfo() {
print("${this.name}---${this.age}");
}
}
void main(){
var p1;
p1='';
p1=new Person('张三1', 20);
// p1.printInfo();
(p1 as Person).printInfo();
}
3)is 类型判断
class Person {
String name;
num age;
Person(this.name,this.age);
void printInfo() {
print("${this.name}---${this.age}");
}
}
void main(){
Person p=new Person('张三', 20);
if(p is Person){
p.name="李四";
}
p.printInfo();
print(p is Object);
}
4) .. 级联操作 (连缀)
class Person {
String name;
num age;
Person(this.name,this.age);
void printInfo() {
print("${this.name}---${this.age}");
}
}
void main(){
// 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="李四" //连缀操作,省去等于,与上面代码效果相同
..age=30
..printInfo();
}
3.Dart 类的继承-简单继承
面向对象的三大特性:封装 、继承、多态
Dart中的类的继承:
1、子类使用extends关键词来继承父类
2、子类会继承父类里面可见的属性和方法 但是不会继承构造函数
3、子类能复写父类的方法 getter和setter
1)简单继承
class Person {
String name='张三';
num age=20;
void printInfo() {
print("${this.name}---${this.age}");
}
}
class Web extends Person{ //使用extends继承父类
}
void main(){
Web w=new Web();
print(w.name);
w.printInfo();
}
2)类的继承 super关键词的使用 实例化自类给父类构造函数传参
class Person {
String name;
num age;
Person(this.name,this.age);
void printInfo() {
print("${this.name}---${this.age}");
}
}
class Web extends Person{
//鼠标放在Web上,然后点击快速修复
Web(String name, num age) : super(name, age);
}
main(){
Person p=new Person('李四',20);
p.printInfo();
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}");
}
}
class Web extends Person{
String sex;
Web(String name, num age,String sex) : super(name, age){
this.sex=sex; //定义自己的属性
}
run(){
print("${this.name}---${this.age}--${this.sex}");
}
}
main(){
Web w=new Web('张三', 12,"男");
w.printInfo();
w.run();
}
03)类的继承 实例化子类给命名构造函数传参
class Person {
String name;
num age;
Person(this.name,this.age);
Person.xxx(this.name,this.age); //命名构造函数
void printInfo() {
print("${this.name}---${this.age}");
}
}
class Web extends Person{
String sex;
Web(String name, num age,String sex) : super.xxx(name, age){ //可以给命名构造函数传递参数
this.sex=sex;
}
run(){
print("${this.name}---${this.age}--${this.sex}");
}
}
main(){
Web w=new Web('张三', 12,"男");
w.printInfo();
w.run();
}
7)类的继承 覆写父类的方法
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();
}
8)子类里面调用父类的方法
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');
print(this.name); //通过this,子类调用父类中的属性
super.work(); //通过super,子类调用父类的方法
}
//覆写父类的方法
@override //可以写也可以不写 建议在覆写父类方法的时候加上 @override
void printInfo(){
print("姓名:${this.name}---年龄:${this.age}");
}
}
main(){
Web w=new Web('李四',20);
w.run();
}

浙公网安备 33010602011771号