/**
* Dart中的靜態(tài)成員: 其實就相當(dāng)于其他語言的類方法和變量
*? ? 1.使用static關(guān)鍵字實現(xiàn)類級別的變量和函數(shù)
*? ? 2.靜態(tài)方法不能訪問非靜態(tài)成員,非靜態(tài)方法可以訪問靜態(tài)成員
*
*
* Dart中對象操作符:
*? ? ?? ? 條件運算符 (類似swift的解包?)
*? ? as? 類型轉(zhuǎn)換? (和swift類似)
*? ? is? 類型判斷
*? ? ..? 級聯(lián)操作(連綴)
*
*
* Dart中的繼承
*? ? 1.子類使用extends關(guān)鍵字來繼承父類
*? ? 2.子類會繼承父類里面可見的屬性和方法, 但是不會繼承構(gòu)造函數(shù)
*? ? 3.子類能重寫父類的方法? getter和setter
*/
main(List<String> args) {
? var p = new Person();
? // p.show();
? Person.show();
? print(Person.name);
// 1. 這樣聲明的animal,沒有創(chuàng)建出來, 變量animal還是null, 并不能調(diào)用say函數(shù),
// ?在這里就是判斷animal是不是null,如果不是就執(zhí)行后面的say函數(shù)
? Animal animal;
? animal?.say();
// 下面這樣創(chuàng)建實例之后就可以使用函數(shù)了
? animal = new Animal.type("Dog");
? animal?.say();
? // 2. is判斷是不是某個類型的, 如果是父類的類型也是true
? if (animal is Animal) {
? ? print("animal是Animal類的實例");
? } else {
? ? print("animal不是Animal類的實例");
? }
? var aa;
? aa = '';
? aa = new Animal.type("Cat");
? // 新版的Dart可以這么用, 之前的老版本需要用as轉(zhuǎn)一下
? aa.say();
? (aa as Animal).say();
? // 3.連綴操作 ..? 比較方便
? Animal monkey = new Animal.type("monkey");
? // 使用..后面直接可以給屬性賦值或者調(diào)用函數(shù), 中間不需要分號, 只是在最后一個操作后面加分號;
? monkey
? ? ..type = "金絲猴"
? ? ..age = 2
? ? ..say();
? Tiger t = new Tiger("老虎", "公");
? // 直接使用繼承的父類的方法和屬性
? t.say();
}
class Person {
? static String name = "張三";
? static show() {
? ? // 靜態(tài)方法里,不能調(diào)用非靜態(tài)的屬性和方法
? ? // print(this.name);
? ? print(name);
? }
? int age = 20;
? des() {
? ? // 非靜態(tài)的方法可以訪問靜態(tài)和非靜態(tài)的方法和屬性
? ? print("這是$name, ${this.age}");
? }
}
class Animal {
? String type;
? int age = 1;
? Animal.type(String type) {
? ? this.type = type;
? }
? Animal(type) {
? ? this.type = type;
? }
? // Animal(this.type);
? say() {
? ? print("這是${this.type}類型");
? }
}
class Tiger extends Animal {
? String sex;
? // 構(gòu)造函數(shù)這里調(diào)用父類super的進行賦值
? Tiger(type, sex) : super(type) {
? ? this.sex = sex;
? }
? eat() {
? ? print("只吃肉!");
? }
? // 重寫父類方法
? @override
? say() {
? ? print("${this.type}是${this.sex}的");
? }
}
class Dog extends Animal {
? // 給命名構(gòu)造哈數(shù)傳參數(shù)
? Dog.type(String type) : super.type(type);
}