訪問(wèn)修飾
- Dart與TypeScript不同,沒(méi)有訪問(wèn)修飾符(public炕置、protected渣锦、private)
- Dart類中,默認(rèn)的訪問(wèn)修飾符是公開(kāi)的(即public)
- 如果屬性或方法以
_
(下劃線)開(kāi)頭飞傀,則表示私有(即private) - 只有把類單獨(dú)的抽離出去颠蕴, 私有屬性和方法才起作用
- lib/Person.dart
- import 'lib/Person.dart'
class Person {
String name;
//聲明私有屬性
num _money = 100;
Person(this.name);
num getMoney() {
return this._money;
}
//聲明私有方法
void _wife(){
print('我的 $name 的老婆');
}
}
import 'Person.dart';
void main() {
var p = new Person('張三');
print(p.name);
//訪問(wèn)私有屬性
// print(p._money);
print(p.getMoney());
//訪問(wèn)私有方法
// print(p._wife());
}
Getter與Setter
- Getter(獲取器)是通過(guò)get關(guān)鍵字修飾的方法
- 函數(shù)沒(méi)有小括號(hào),訪問(wèn)時(shí)也沒(méi)有小括號(hào)(像訪問(wèn)數(shù)屬性一樣訪問(wèn)方法)
- Setter(修改器)是通過(guò)set關(guān)鍵字修飾的方法
- 訪問(wèn)時(shí)助析,像設(shè)置屬性一樣給函數(shù)傳參
class Circle {
final double PI = 3.1415;
num r;
Circle(this.r);
// num area() {
// return this.PI * this.r * this.r;
// }
//Getter 使用get聲明的方法犀被,不能有小括號(hào)
num get area {
return this.PI * this.r * this.r;
}
//Setter
set setR(value) {
this.r = value;
}
}
void main() {
var c = new Circle(10);
// print(c.area());
//通過(guò)setter修改屬性
c.setR = 20;
print(c.area);
}
初始化列表
- 作用:在構(gòu)造函數(shù)中設(shè)置屬性的默認(rèn)值
- 時(shí)機(jī):在構(gòu)造函數(shù)體執(zhí)行之前執(zhí)行
- 語(yǔ)法:使用逗號(hào)分隔初始化表達(dá)式
- 場(chǎng)景:常用語(yǔ)設(shè)置final常量的值
image.png
import 'dart:math';
import 'package:my_flutter_app/07_Default_Constructor.dart';
class Rect {
int height;
int width;
// Rect(this.height,this.width);
// Rect([int height=2,int width=10]){
// this.height=height;
// this.width=width;
// print('${this.height}--${this.width}');
// }
//初始化列表
Rect()
: height = 4,
width = 4 {
print('${this.height}--${this.width}');
}
}
class Point {
double x, y, z;
Point(this.x, this.y, this.z);
//初始化列表的特殊用法(重定向構(gòu)造函數(shù))
Point.twoD(double x, double y) : this(x, y, 0);
}
void main() {
var r = new Rect();
var p = new Point(1, 2, 3);
print(p.z);
var p2 = new Point.twoD(4, 5);
print(p2.z);
}
static
- static關(guān)鍵字用來(lái)指定靜態(tài)成員
- 通過(guò)static修飾的屬性是靜態(tài)屬性
- 通過(guò)static修飾的方法是靜態(tài)方法
- 靜態(tài)成員可以通過(guò)類名稱直接訪問(wèn)(不需要實(shí)例化)
- 實(shí)例化是比較消耗資源的,聲明靜態(tài)成員外冀,可以提高程序性能
- 靜態(tài)方法不能訪問(wèn)非靜態(tài)成員寡键,非靜態(tài)方法可以訪問(wèn)靜態(tài)次成員
- 靜態(tài)方法中不能使用this關(guān)鍵字
- 不能使用this關(guān)鍵字訪問(wèn)靜態(tài)屬性
class Person {
static String name = '張三';
int age = 10;
static printInfo() {
//不能通過(guò)this關(guān)鍵字,訪問(wèn)靜態(tài)屬性
// print(this.name);
print(name);
//靜態(tài)方法中不能訪問(wèn)非靜態(tài)屬性
// print(age);
//靜態(tài)方法雪隧,不能訪問(wèn)非靜態(tài)方法
// printUserinfo();
}
printUserinfo() {
//非靜態(tài)方法可以訪問(wèn)靜態(tài)屬性
print(name);
print(age);
printInfo();//非靜態(tài)方法西轩,可以訪問(wèn)靜態(tài)方法
}
}
void main() {
//靜態(tài)成員 可以通過(guò)類目詞直接訪問(wèn)
print(Person.name);
print(Person.printInfo());
//不能通過(guò)類名稱直接訪問(wèn)非靜態(tài)方法
// print(Person.printUserinfo());
var p = new Person();
//不能通過(guò)實(shí)例化對(duì)象去訪問(wèn)靜態(tài)屬性
// print(p.name);
print(p.printUserinfo());
}
元數(shù)據(jù)
- 元數(shù)據(jù)以
@
開(kāi)頭,可以給代碼標(biāo)記一些額外的信息- 元數(shù)據(jù)可以用來(lái)庫(kù)脑沿、類藕畔、構(gòu)造器、函數(shù)庄拇、字段注服、參數(shù)或變量聲明的前面
- @override (重寫(xiě))
- 某方法添加該注解后,表示重寫(xiě)了父類中的同名方法
- @required (必填)
- 可以通過(guò)@required 來(lái)注解Dart中的命名參數(shù)措近,用來(lái)指示它是必填參數(shù)
- @deprecated (棄用)
- 若某類或某方法加上該注解后溶弟,表示此方法或類不再建議使用
class Phone {
turnOn() {
print('開(kāi)機(jī)');
}
//這是舊版本的開(kāi)機(jī)方法,后在將來(lái)版本中移除
@deprecated
activate() {
turnOn();
}
}
void main() {
var p = new Phone();
p.activate();
}