Flutter——Dart面向对象
1. 类与对象
在Flutter中,使用class 关键字声明一个类,使用new加上构造函数生成一个对象,所有的对象都默认继承Object类。Dart中会默认生成getter 和 setter方法,属性和方法都通过点语法进行访问,Dart方法不支持重载。final修饰的属性必须定义初始值。
声明一个类:
class LGPerson {
String? name;
int? age;
final String hobby = 'coding';
void run() {
print("name:$name age:$age");
}
}
声明一个对象和方法调用:
LGPerson p = LGPerson();
p.name = 'LS';
p.age = 18;
p.run();
在Dart中,同文件是不存在私有化的,只有在不同文件中,才能有私有属性。
新建一个文件,并添加一个新的LGTeacher类,只对外暴露height属性和printTeacher方法。
class LGTeacher {
String? _name;
int? _age;
int? height;
void _run() {
print("name:$_name age:$_age");
}
void printTeacher() {
_run();
}
}
这里可以看到,外部就无法访问私有属性和方法了,而如果是同一个文件里面的class,则依然可以访问。

2. 构造函数
定义完一个类之后,这个类默认就有构造函数。相当于:
LGperson(){}
这里可以自定义构造函数,如果自定义了构造函数,那么默认的构造函数就无效了。
LGPerson(int age,String name){
_name = name;
_age = age;
}
LGPerson p = LGPerson(18,"test");
如果这里不是私有属性的话, 就会出现属性和参数名字一样的情况:
name = name;
age = age;
这里可以将参数改名字或者在属性前面加this.,但是推荐使用Dart语法糖来自动赋值。
LGPerson(this.age,this.name);
用了这个语法糖之后,属性也可以不需要变成Nullability的。
class LGPerson {
String name;
int age;
LGPerson(this.age,this.name);
void run() {
print("name:$name age:$age");
}
}
如果属性使用final修饰的,那么这个属性之后就不能改变了。

class 里面还可以创建命名构造函数:
LGPerson.wit

本文深入探讨Dart中的面向对象特性,包括类与对象、构造函数、工厂构造与单例对象、类方法、继承、抽象类、混入Mixins以及操作符重载。详细讲解了Dart如何声明类、构造对象,以及如何实现单例模式、类方法和对象操作。此外,还介绍了Dart的继承机制、抽象类和接口的使用,以及如何通过混入实现多继承的效果。最后,文章讨论了操作符重载的应用,帮助开发者更好地理解和运用Dart的面向对象编程。
最低0.47元/天 解锁文章
1168

被折叠的 条评论
为什么被折叠?



