1、 类的setter 和 getter
格式
类型 get 变量名 => 值;
set 同变量名函数名(类型 新值变量名)=> 新值(此处可连带其他属性赋值逻辑)
代码
class Rectangle {
num left,top,width,height;//此时 四个变量
Rectangle(this.left,this.top,this.width,this.height);//构造函数
// 定义两个计算属性值 区别 num right=0;
num get right=> left+width;
set right(num value)=> left = value-width;
num get bottom=> top+height;
set bottom(num value)=>top=value-height;
}
void main(List<String> args) {
var rect = Rectangle(2, 3, 4, 5);
print(rect.left);
rect.right=12;
print(rect.left);
}
上述代码。貌似掺合了业务逻辑,对于代码提取相关知识点,我换个新的示例
class Person{
String name,home;
Person(this.name,this.home);
num _age = 0;
num get age=> _age;
set age(num value)=>_age=value;
}
void main(List<String> args) {
var p = Person('name Li', 'home beijing');
p._age = 5;
print('person: ${p.name} ,居住${p.home},年${p.age}');
p.age = 20;
print('person: ${p.name} ,居住${p.home},年${p.age}');
}
然后总结setter 和 getter 方法:
type _name;
type get name=> _name;
set name(type value)=>_name=value;
2、抽象方法和抽象类
关键字 abstract
使用关键字abstract 修饰的类,为抽象类;
类中,为实现方法,只有方法名的方法,称为抽象方法
示例
abstract class Animal{//抽象类
void printMyName();//抽象方法
}
class Dog extends Animal{
@override
void printMyName() {//抽象方法实现
// TODO: implement printMyName
print('object: Dog');
}
}
3、隐式接口
这个我的个人理解就是 dart 语言设计时,没有关键字interface,但是有implements,(每个类都隐士的定义了一个接口,不需要interface)
一个类可以通过implements 关键字实现一个或者多个接口,并实现每个接口要求的API。
这里需要注意,构造函数不包含在接口里
class Student{
final _name;//包含在接口里,但只有当前库可见
Student(this._name);//不包含在接口里,因为这是构造函数
String greet(String who)=>'Hello,$who .I am $_name';//包含在接口中
}
class CollegeStudent implements Student{
get _name =>'';
String greet(String who)=>'Hi $who,Do you know who I am?';
}
调用:
String greetBob(Student student) => student.greet('Bob');
print(greetBob(Student('Lucy')));
print(greetBob(CollegeStudent()));
4、扩展类(继承)
关键字 extends;super 引用父类
5、重写关键字 @override
6、重写运算符(了解一下即可)
重写== 和 hashCode
7、noSuchMethod()
处理不存在的方法活实例变量
8、Mixin 复用类代码的一种途径
关键字 with
9、static 修饰类、变量、方法
10、enum 枚举
以上再次复习了一下dart关于类的用法,此处疑问:
dart语言设计 extends 和 Mixin ,implements的用法区别是啥呢?
有点懵圈呀,让我在琢磨一下吧