Dart語言中類和Java語言中都很類似,但是也有一些區別
1.類的定義和初始化
- 默認或生成set/get方法
- 使用final修飾的只有get方法
- 屬性和方法通過
.
來房訪問 - 方法不能被重載
- Dart中可見性以庫爲單位,默認情況下一個Dart文件就是一個庫
- _用來表示私有性
class Student {
String name;
int age;
final String adress;
Student(names, age) {
this.name = names;
this.age = age;
}
void print_Info() {
print("name=$name,age=$age");
}
}
//初始化
Student student = new Student("張一博", 26);
student.name = "Tom";
student.print_Info();
2.類計算屬性
void main() {
//創建對象設置屬性
Yuan yuan = new Yuan();
yuan.height = 100;
yuan.width = 20;
// 設置圓面積屬性
print(yuan.area);
//設置圓width屬性
yuan.area = 100;
print(yuan.width);
// 獲取圓周長屬性
print(yuan.zhouchang)
yuan.zhouchang = 100;
print(yuan.width);
}
class Yuan {
num width;
num height;
//計算屬性 area 面積 屬性
num get area {
return width * height;
}
//設置屬性
set area(value) {
width = value / 5;
}
//計算屬性 area 周長 屬性
num get zhouchang => (width + height) * 2;
//計算屬性 width 屬性
set zhouchang(value) => width = value / 2 - 20;
int getAre() {
return width * height;
}
}
3.類的構造方法
Dart中類的構造和Java中構造不太一樣,Dart中類的構造不能重載,必須通過特定方式來創建不同的構造方法。
/**
* 構造方法創建注意
*
* 構造方法不能重載
*
*/
class Person {
String name;
int age;
final String adress;
Person(String name, int age) {
this.name = name;
this.age = age;
}
/**
* 多個構造方法通過以下方式
*/
Person.withName(String name) {
this.name = name;
}
Person.withAge(int age) {
this.age = age;
}
Person.withInfo(String name, int age) {
this.name = name;
this.age = age;
}
/**
* final 屬相通過可以通過以下構造方法賦值
*/
Person.withAllInfo(this.name, this.age, this.adress);
void printPersonInfo() {
print("name=$name,age=$age");
}
}
//對象創建
Person person=new Person.withAge(20);
Person person=new Person.withInfo("tom",20);
person.printPersonInfo();
除了普通的構造方法外還有一種工廠構造方法,工廠構造方法可以返回一個對象
/**
* 工廠構造方法,可以返回一個對象
*/
class Looger {
String name;
static Map<String, Looger> cache = new Map();
factory Looger(String name) {
if (cache.containsKey(name)) {
return cache[name];
} else {
Looger looger = new Looger._internal(name);
cache[name] = looger;
return looger;
}
}
//私有構造方法
Looger._internal(this.name);
printInfo(msg) {
print(msg);
}
}
4.類對象操作符符號
- ? 判斷對象是否爲空
- as 對象轉換
- is 判斷是否屬於某個類型
- … 級聯調用,類似java中的build模式
class Man {
String name;
int age;
Man(this.name, this.age);
printManInfo() {
print("name=$name,age=$age");
}
}
//對象操作符號
//? 判斷對象是否爲空
Man man;
man?.printManInfo();
// as 對象轉換
var mans;
mans = "hello";
mans = new Man("tom", 20);
(mans as Man).printManInfo();
//is 判斷是否屬於某個類型
if (mans is Man) {
(mans as Man).printManInfo();
}
// .. 級聯調用,類似java中的build模式
Man manss = new Man("tom", 25);
manss
..name = "zhang"
..age = 10
..printManInfo();
================================
name=tom,age=20
name=tom,age=20
name=zhang,age=10
5.類對象Call方法
編寫call方法可以吧對象看作方法一樣進行調用
class Man {
String name;
int age;
Man(this.name, this.age);
printManInfo() {
print("name=$name,age=$age");
}
void call(){
print("name=$name,age=$age");
}
}
Man man5=new Man("tom", 20);
man5();
===================================
name=tom,age=20