Dart語言基本特點(Object)

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】工具都會自動檢測到錯誤;

圖1 重載Object子類構造函數
圖2 重載Object子類構造函數

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 關鍵字的作用;

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章