目录
1.类的基础语法
Dart中使用Class关键字定义一个类。
和其它语言一样,类方法的调用形式为"对象.方法"。
实例代码如下:定义一个People类,并且给对象赋值。
class People{
String name;
int age;
}
void main() {
var student = People();
student.name = "废柴";
student.age = 18;
print('学生姓名:'+student.name+'\t年龄:\t'+student.age.toString());
}
控制台打印日志如下:
Performing hot restart...
Syncing files to device iPhone 13 Pro Max...
Restarted application in 347ms.
flutter: 学生姓名:废柴 年龄: 18
Dart中还有一个比较使用的方法,就是可以通过"对象?.方法名称"的形式类实现类方法的调用,这样可以避免对象为null时候,程序出现异常。
class People{
String name;
int age;
}
void main() {
var student = People();
student.name = "废柴";
student.age = 18;
// student = null;
// print(student.name) //此时程序会报异常,这个时候,我们可以使用student?.name避免这个问题。
print('学生姓名:'+student.name+'\t年龄:\t'+student.age.toString());
}
2.类的继承和重载
Dart中使用extends关键字表示继承关系,Dart支持多继承,使用关键字with可以实现多继承。
代码如下:
class People{
String name;
int age;
void basicInformation(){
print('人类信息');
}
}
//学生类 使用extends关键字表示 Student类继承自People类
class Student extends People{
String studentId;
String studentIdentity;
@override
void basicInformation(){
print('学生信息');
}
}
class Worker{
String workerId;
String workerName;
void workerInfo(){
print('打工人信息');
}
}
// myIdentify类使用with继承了Student和Worker类,既可以调用 学生类的 basicInformation方法,
// 也可以调用 worker类的workerInfo方法
class myIdentify extends Student with Worker{
void infor(){
print('我的信息');
}
}
3.抽象类和枚举
Dart中使用abstract关键字将一个类声明为抽象类,在抽象类中定义抽象方法,变量等等。
abstract class AbstractClass{
void abstractMethod();//定义抽象方法
}
class MyImplement extends AbstractClass{
@override
void abstractMethod() {
// TODO: implement abstractMethod
print('我是抽象方法实现类');
}
}
void main() {
MyImplement().abstractMethod();
}
控制台日志如下:
Performing hot restart...
Syncing files to device iPhone 13 Pro Max...
Restarted application in 325ms.
flutter: 我是抽象方法实现类
4.实现接口
Dart支持多个接口实现,可以使用implements关键字。
实例代码如下:
class Student {
Student();
String study(){
return 'I am a student,today i learn something';
}
}
class ImlClass implements Teacher,Student{
@override
String teach() {
// TODO: implement teach
throw UnimplementedError();
}
@override
String study() {
// TODO: implement study
throw UnimplementedError();
}
@override
// TODO: implement _name
get _name => throw UnimplementedError();
}
5.Dart中的方法
1.构造方法
构造方法通常是用来通过传递一些参数类初始化这个类,构造方法需要和类同名。
实例代码如下:我们定义一个三角形的类,通过传递宽高,初始化三角形这个类。
class TriangleSize {
double width;
double height;
TriangleSize(double width,double height){
this.width = width;
this.height = height;
}
}
void main() {
var triangle = TriangleSize(2,3);
print(triangle.width);
}
2.静态方法
静态方法的调用使用类名+静态方法名的方式直接调用静态方法。
实例代码如下:
class StaticClass{
static void printMethod(){
print('我是静态方法类');
}
}
void main() {
StaticClass.printMethod();
}
3.可选参数方法
dart中具有可选参数方法,调用方法是,我们可以只传递部分参数。
实例代码如下:
class StaticClass{
static void printMethod({String name,String arguments2}){
print('我是静态方法类');
}
}
void main() {
StaticClass.printMethod(name: '123');
StaticClass.printMethod(arguments2: 'arguments2');
StaticClass.printMethod(name: '123',arguments2: '2');
}
4.getter和setter方法
Dart中自动会生成Setter和getter方法。
赋值操作相当于setter方法。
取值操作相当于getter方法。
5.匿名函数
当我们使用Flutter创建项目的时候,系统会自动生成一个计时器的Demo.里面就是匿名函数,代码如下:
void _incrementCounter(){
setState({
_counter++;
});
}
6.泛型
Dart中使用T来表示泛型:
void setData<T>(String key, T value)
{
print("key=${key}" + " value=${value}");
}
T getData<T>(T value)
{
return value;
}
void main(List<String> args) {
setData("name", "hello dart!"); // string类型
setData("name", 123); // int 类型
print(getData("name")); // string类型
print(getData(123)); // int 类型
// print(getData<bool>("hello")); // Error,约束了类型是bool但是传入了String,所以编译器会报错
}