/**
* Dart所有的東西都是對(duì)象, 所有的對(duì)象都是繼承自O(shè)bject類
* Dart是一門實(shí)用類和單繼承的面向?qū)ο笳Z言, 所有的對(duì)象都是類的實(shí)例, 并且所有的類都是Object的子類
* 面向?qū)ο蟮娜齻€(gè)基本特征: 封裝,? 繼承,? 多態(tài)
* 這和Object-C? Swift? Java等面向?qū)ο笳Z言一樣
*
* Dart里面構(gòu)造函數(shù)可以寫多個(gè)
* Dart中沒有public,? private? protected等這些訪問修飾符
*? ? 但是我們可以使用一個(gè)下劃線_把一個(gè)屬性或者方法定義成私有,
*? ? 這樣使用需要將類單獨(dú)放到一個(gè)文件里面抽離出來
*/
//通過import引入別的文件的類,和其他語言都差不多
import "lib/Stu.dart";
main(List<String> args) {
? List<int> l = new List();
? l.add(2);
? // var p = new Person();
? // p.des();
? // p.name = "王五";
? // p.des();
? Person1 p1 = new Person1("李四", 30);
? p1.des();
? Person2 p2 = new Person2("王五", 22);
? p2.des();
? Person3 p3 = new Person3.des("小紅", 28);
? p3.des();
? print(p3.introlduce);
? p3.name = "小虎";
? print(p3.introlduce);
? p3.introduceMap = {"name": "小鹿", "age": 28};
? print(p3.introlduce);
? Student stu = new Student("小紅", 10);
? stu.des();
? // stu._name = "daxa";//這里是拿不到_name的,因?yàn)開name是私有屬性
? Rect r = new Rect();
? print(r.area);
}
// 定義類用class關(guān)鍵字, 首字母大寫
class Person {
? String name = "張三";
? int age = 20;
? // **** 默認(rèn)構(gòu)造函數(shù),在使用new創(chuàng)建對(duì)象實(shí)例的時(shí)候就會(huì)觸發(fā)這個(gè)函數(shù)
? Person() {
? ? print("這是構(gòu)造函數(shù), 在使用new創(chuàng)建對(duì)象實(shí)例的時(shí)候就會(huì)觸發(fā)這個(gè)函數(shù)!");
? }
? void des() {
? ? print("${this.name}, ${this.age}");
? }
? void des1() {
? ? print("$name-$age");
? }
}
// 定義類用class關(guān)鍵字, 首字母大寫
class Person1 {
? String name;
? int age;
? // **** 默認(rèn)構(gòu)造函數(shù),在使用new創(chuàng)建對(duì)象實(shí)例的時(shí)候就會(huì)觸發(fā)這個(gè)函數(shù)
? // 在構(gòu)造函數(shù)中進(jìn)行初始化屬性
? Person1(String name, int age) {
? ? this.name = name;
? ? this.age = age;
? ? print("這是構(gòu)造函數(shù), 在使用new創(chuàng)建對(duì)象實(shí)例的時(shí)候就會(huì)觸發(fā)這個(gè)函數(shù)!");
? }
? void des() {
? ? print("${this.name}, ${this.age}");
? }
? void des1() {
? ? print("$name-$age");
? }
}
// 定義類用class關(guān)鍵字, 首字母大寫
class Person2 {
? String name;
? int age;
? // **** 默認(rèn)構(gòu)造函數(shù),在使用new創(chuàng)建對(duì)象實(shí)例的時(shí)候就會(huì)觸發(fā)這個(gè)函數(shù)
? // 在構(gòu)造函數(shù)中進(jìn)行初始化屬性
? // 這樣可以簡(jiǎn)寫一下,就是直接將參數(shù)寫成this.的形式
? Person2(this.name, this.age) {
? ? print("這是構(gòu)造函數(shù), 在使用new創(chuàng)建對(duì)象實(shí)例的時(shí)候就會(huì)觸發(fā)這個(gè)函數(shù)!");
? }
? void des() {
? ? print("${this.name}, ${this.age}");
? }
? void des1() {
? ? print("$name-$age");
? }
}
// 自定義的命名構(gòu)造函數(shù)
// 自定義構(gòu)造函數(shù)可以寫多個(gè)
class Person3 {
? String name;
? int age;
? // 默認(rèn)構(gòu)造函數(shù) new Person3是調(diào)用
? Person3(this.name, this.age) {}
? // 這是命令構(gòu)造函數(shù) new Person3.des時(shí)調(diào)用
? Person3.des(this.name, this.age) {}
? void des() {
? ? print("${this.name}, ${this.age}");
? }
? //計(jì)算屬性:? get 屬性名 {}
? get introlduce {
? ? // return的值就是introlduce的值
? ? return "自我介紹:${this.name}, ${this.age}";
? }
? // set 屬性名(參數(shù)) {}
? set introduceMap(value) {
? ? this.name = value["name"];
? ? this.age = value["age"];
? }
}
// 初始化賦值
class Rect {
? int width;
? int height;
? Rect()
? ? ? : height = 10,
? ? ? ? width = 5 {
? ? print("這種寫法,height和width的賦值,是在初始化之前");
? }
? get area {
? ? return this.width * this.height;
? }
}