Dart和Java語言一樣一切皆對象,每個對象都是一個類實例,所有的類都直接或者借接繼承Object類。
Dart同樣具有面向對象的語言的:封裝、繼承、多態的基本特點;
Dart語言和Java語言中共同點是都是單繼承;
Dart中任何一個可以用變量引用的都是一個對象,在 Dart 中 甚至連 數字、函數和 null 都是對象。Dart中所有的對象都繼承了Object 類。
所以學習Dart語言自然是從Object類開始。
一、Dart語言中的Object類,源碼
class Object {
const Object();
external bool operator ==(other);
external int get hashCode;
external String toString();
@pragma("vm:entry-point")
external dynamic noSuchMethod(Invocation invocation);
external Type get runtimeType;
}
二、Object 類中的各個函數認識
1.const Object()函數
Dartu 語言中一切皆對象,函數也是對象。每個對象都有自己的類型,函數的類型是Function
很顯然就是在Object中已經定義了構造函數,而且是由const 修飾的表示構造函數不可重載;即在子類中能有一個構造函數。
- Dart 語言中通過函數的可選參數[支持選擇參數位置也可選擇是否傳參]、默認參數值等來實現/解決其他語言中的函數重載的需求。
- Dart語言中藉助@required註解表示必傳參數, @required需要引入包 package:meta/meta.dart,如果是用flutter,則可以引入包package:flutter/material.dart
- Dart中同樣main函數爲入口,而且所有函數都有返回值,如果代碼中沒有返回值,dart語言會默認在最後添加隱士return null 語句
例:下圖中重載構造函數時無論有參和無參構造先後順序,IDEL【AndroidStudio】工具都會自動檢測到錯誤;
Dart中 final const修飾 常量/固定值 的幾個基本特點
如果你以後不打算修改一個變量,使用 final 或者 const。
一個 final 變量只能賦值一次,即定義final變量時就要賦值, 一旦賦值,就不能改變final變量的值;
const 變量同時也是 final 變量
const 變量是編譯時常量【必須根據可在編譯時計算的數據創建它們】, 即const可以修飾 一個四則運算算術表達式,也可以是Map、List等編譯時可以確定值的對象;
const 修飾的數組、Map、List等變量數據被修飾的數據結構中的數據也默認遞歸被const修飾,即變量對象的結構和值不能被修改;
其他關於final const 可參類型考Const, Static, Final
注意: 實例變量可以爲 final 但是不能是 const 。
2. external bool operator ==(other);函數
第一次看到這個函數和註釋雖然很快知道這個函數和Java中的函數 public boolean equals(Object obj)函數一樣都 是判斷連個對象是否相同,區別是Java中已經默認實現函數是直接對比對象的指針【子類沒有重寫情況下】,而Dart是直接用external修飾把比較方法留給子類自己定義;
有趣的是在Dart中 == 函數調用時:
TestObject test = TestObject();
TestObject test1 = TestObject();
print("${test == test1}");
實際調用是調用test對象的==函數test1作爲參數;這個也正是operator 關鍵字的作用;