Dart — 面向对象的一些基本特性

Dart — 面向对象的一些基本特性


dart 面向对象 移动端

使用 class 声明一个类 使用 new 创建对象 new 可省略 所有对象继承于 Object

void main(){
	var person = new Person();
}
class Person{
	String name;
	int age;
	final String gender;

	void show(){
		print("Name is $name,Age is $age");
	}
}

属性默认生成 getter setter 方法 final 声明的属性 只有 getter 方法 方法不能重载

每个 dart 文件 理解为一个库(library) 在类名前 或者 属性 方法名前加上 _ 表示私有

Person.dart
class _Person{
	String _name;
	int age;
	final String gender;

	void _show(){
		print("Name is $_name,Age is $age");
	}
}

Test.dart
import 'Person.dart'
var person = _Person(); //此时会报错

计算属性

class Rectangle{
	num width,height;

	//使用方法获得面积
	num area(){
		return width * height;
	}

	//计算属性获得面积
	num get area => width * height;
	//设置计算属性的值
		set area(value){
			width = value / 20;
		}
}

void main(){
	var rect = new Rectangle();
	rect.height = 20;
	rect.width = 10;

	print(rect.area);//200

	rect.area = 200;
	print(rect.width);//10
}

构造方法

有默认构造方法

class Person{
	String name;
	int age;
	final String gender;

	void show(){
		print("Name is $name,Age is $age");
	}

	//构造方法
	Person(String name,int age){
		this.name = name;
		this.age = age;
	}

	//上面写法的语法糖
	Person(this.name,this.age){
		print(name);
		//语法糖形式 赋值在方法执行之前
		//语法糖内可对final属性赋值 正常方式不行
	}

	//如果要使用多个构造方法 如下 类名.方法名:
	Person.withName(String name){
		this.name = name
	}

	new Person.withName("Niko");
}

常量构造方法

如果类是不可变状态 即属性都是 常量或 final,可以把对象定义为编译时常量 使用 const 声明构造方法 并且所有变量都为 final 使用 const 声明对象 可以省略

常量运行速度更快

class Person{
	final String name;
	final int age;
	final String gender;

	const Person(this.name,this.age,this.gender);

	void show(){
		print("Name is $name,Age is $age");
	}
}

void main(){
	const person = const Person("Niko",23,"Male")
}

工厂构造方法 可以有返回值 返回一个对象

缓存类可以用到

class Person{
	String name;
	int age;
	final String gender;

	factory Person(String name){
		final person = Person.init(name);
		return person;
	}

	Person._init(this.name);
}

初始化列表

void main(){
	var person = new Person();
}
class Person{
	String name;
	int age;
	final String gender;

	Person(this.name,this.age,this.gender);

	//在构造方法方法体之前运行 可以对final属性赋值初始化
	Person.withMap(Map map): gender = map["gender"]{
		this.name = map["name"];
		this.age = map["age"];
	}

	//不是final的属性一样可以写后面
	Person.withMap(Map map): name = map["name"],gender = map["gender"]{
		this.age = map["age"];
	}
}

静态成员 static 声明后变为 类级别 跟 java 一样 静态成员不能访问非静态 反之可以 类中的常量 用 static const 声明

class Person{

	static const int max = 10;
	static int age = 1;

	static void init(){
		age = 1;
		print("init...");
	}

	void add(){
		age++;
	}
}

void main(){
	Person.init();
}

对象操作符

  1. ?. 条件成员访问 person?.name peron?.work() a 为 null 则 b 不运行 避免空指针

  2. as 类型转换 强转

  3. 是否指定类型 is is!

  4. 级联操作 ..

void main(){
	var person = new Person();
	person..name = "Niko"
			..age = 23
			..show();
}
class Person{
	String name;
	int age;
	final String gender;

	void show(){
		print("Name is $name,Age is $age");
	}
}

对象的 call 方法 实现了 call 方法 对象即可作为方法使用

void main(){
	var person = new Person();
	person("Niko",23);
}
class Person{
	String name;
	int age;

	void call(String name,int age){
		print("Name is $name,Age is $age");
	}
}
© 2025 Niko Xie