面向对象的三大特性:
- 封装
- 继承
- 多态
dart
中类的继承:
- 子类使用
extends
关键字来继承父类 - 子类会继承父类里面可见的属性和方法,但是不会继承构造函数
- 子类能复写父类的方法 getter 和 setter
简单继承
// Person.dart
class Person {
String name;
int age;
Person(String this.name , int this.age);
void printName(){
print('name $name');
}
}
// Cat.dart
import 'Person.dart';
class Cat extends Person{
String color;
// super 关键字 , 因为父类的构造函数是不能被继承的, 但是父类需要传递参数, 所以要使用初始化列表的方式调用父类的构造函数, 并传递参数。
Cat(String name, int age , String this.color) : super(name, age);
// Cat(String name, int age , String this.color) : super.c(name , age); 也可以调用父类的命名构造函数
void say(){
print('我是 $name ---- 我的颜色是 $color');
}
}
// index.dart
import 'lib/cat.dart';
void main() {
Cat cat = new Cat('小猫', 3, '白色');
// 调用父类的方法
cat.printName();
// 调用自己的方法
cat.say();
}
复写父类的方法
// 父类
class Person {
String name;
int age;
Person(String this.name , int this.age);
void printName(){
print('name $name');
}
void work(){
print('$name 在工作');
}
}
// 子类
import 'Person.dart';
class Cat extends Person{
String color;
Cat(String name, int age , String this.color) : super(name , age);
void say(){
print('我是 $name ---- 我的颜色是 $color');
// 子类可以通过 super 关键字调用父类的方法
super.work();
}
// 复写 父类的方法
@override
void printName() {
print('$name ---- 复写父类的方法');
}
}
// index
import 'lib/cat.dart';
void main() {
Cat cat = new Cat('小猫', 3, '白色');
cat.printName();
cat.say();
}