【Dart】訪問(wèn)修飾/靜態(tài)/元數(shù)據(jù)

訪問(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();
}

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末瞭郑,一起剝皮案震驚了整個(gè)濱河市辜御,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌屈张,老刑警劉巖擒权,帶你破解...
    沈念sama閱讀 206,311評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異阁谆,居然都是意外死亡碳抄,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,339評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門(mén)笛厦,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)纳鼎,“玉大人,你說(shuō)我怎么就攤上這事〖桑” “怎么了劝贸?”我有些...
    開(kāi)封第一講書(shū)人閱讀 152,671評(píng)論 0 342
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)逗宁。 經(jīng)常有香客問(wèn)我映九,道長(zhǎng),這世上最難降的妖魔是什么瞎颗? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 55,252評(píng)論 1 279
  • 正文 為了忘掉前任件甥,我火速辦了婚禮,結(jié)果婚禮上哼拔,老公的妹妹穿的比我還像新娘引有。我一直安慰自己,他們只是感情好倦逐,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,253評(píng)論 5 371
  • 文/花漫 我一把揭開(kāi)白布譬正。 她就那樣靜靜地躺著,像睡著了一般檬姥。 火紅的嫁衣襯著肌膚如雪曾我。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 49,031評(píng)論 1 285
  • 那天健民,我揣著相機(jī)與錄音抒巢,去河邊找鬼。 笑死秉犹,一個(gè)胖子當(dāng)著我的面吹牛蛉谜,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播凤优,決...
    沈念sama閱讀 38,340評(píng)論 3 399
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼悦陋,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了筑辨?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 36,973評(píng)論 0 259
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤幸逆,失蹤者是張志新(化名)和其女友劉穎棍辕,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體还绘,經(jīng)...
    沈念sama閱讀 43,466評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡楚昭,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,937評(píng)論 2 323
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了拍顷。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片抚太。...
    茶點(diǎn)故事閱讀 38,039評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出尿贫,到底是詐尸還是另有隱情电媳,我是刑警寧澤,帶...
    沈念sama閱讀 33,701評(píng)論 4 323
  • 正文 年R本政府宣布庆亡,位于F島的核電站匾乓,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏又谋。R本人自食惡果不足惜拼缝,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,254評(píng)論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望彰亥。 院中可真熱鬧咧七,春花似錦、人聲如沸任斋。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,259評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)仁卷。三九已至穴翩,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間锦积,已是汗流浹背芒帕。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,485評(píng)論 1 262
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留丰介,地道東北人背蟆。 一個(gè)月前我還...
    沈念sama閱讀 45,497評(píng)論 2 354
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像哮幢,于是被迫代替她去往敵國(guó)和親带膀。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,786評(píng)論 2 345

推薦閱讀更多精彩內(nèi)容