java——與c++之不同——類

訪問權限

成員訪問權限

  • 默認成員訪問權限爲package,只能被同一package內類訪問
  • protected可被同一package內類訪問,因此protected = package + 跨package子類
  • 成員訪問權限大小:public > protected > package > private

類訪問權限

  • 默認類訪問權限爲package,只能被同一package內類訪問和繼承
  • public類訪問權限可被所有package內類訪問和繼承
注1:成員訪問權限 = min(成員訪問權限, 類訪問權限),因此package類成員的public權限和protected權限本質還是package權限
注2:不管是成員訪問權限還是類訪問權限,package訪問權限只是認知上的理解,訪問權限本身並無package關鍵字,默認缺省就是package訪問權限

繼承

  • 只支持單根繼承,不支持多重繼承,無顯式父類則繼承自root類Object
  • 只有唯一繼承方式,public繼承,且public無須顯式指明

class加載

  • class被引用時(包括實例化對象和引用類static成員),jvm會加載相關class文件
  • class加載順序:父類(數據成員類->當前類)->子類(數據成員類->當前類)
  • 數據成員類加載順序與數據成員類(static和non-static)在類中定義順序一致

初始化

static數據成員初始化

  • static數據成員不屬於實例對象成員,static數據成員於class加載時初始化,static數據成員初始化順序與static數據成員在類中定義順序一致,且只初始化一次
  • static數據成員初始化早於non-static數據成員初始化

non-static數據成員初始化

  • non-static數據成員屬於實例對象成員,non-static數據成員於實例化對象時初始化
  • non-static數據成員初始化順序:父類(non-static數據成員->構造函數)->子類(non-static數據成員->構造函數)
  • non-static數據成員初始化順序與non-static數據成員在類中定義順序一致
  • non-static數據成員若無顯式初始化,則初始化爲0

this&super

  • 引用本類用this
  • 引用父類用super

構造函數

  • java構造函數功能單一,不含初始化列表,或初始化列表散落在數據成員定義處,因此數據成員初始化先於構造函數調用
  • 在性能和安全性之間,java選擇了安全性,java數據成員默認初始化爲0(引用類型爲null)
  • java構造函數無初始化列表,因此java構造函數本質並非初始化行爲,因此java構造函數與普通函數無本質區別,構造函數多次調用不會導致重複初始化
  • java構造函數非常靈活,構造函數可相互調用,但不可遞歸調用(直接遞歸或間接遞歸),構造函數調用語句只能放在主調構造函數首行,構造函數不可被普通函數調用
  • 父類構造函數必須顯式調用(子類構造函數調用),且必須放在首行,如果調用父類默認構造函數,可omit,因此除非調用父類默認構造函數,否則子類不可調用本類其他構造函數,否則違背構造函數調用必須放在首行原則

複製構造函數

  • java只有heap實例對象,無stack實例對象,且實例對象只能通過引用間接訪問,不可直接訪問實例對象,因此java無複製構造函數

析構函數

  • java通過GC(Garbage Collection)機制管理對象內存,因此java無析構函數

賦值操作符函數

  • java不支持操作符重載,因此java無賦值操作符函數

non-static方法

  • non-static方法默認runtime bind,因此編譯期無法確認non-static方法是否會被調用,爲避免runtime crash,non-static方法必須實現
  • override方法時,子類訪問權限不能比父類訪問權限小,即子類訪問權限必須大於等於父類訪問權限(public > protected > package > private)
注:構造函數編譯期bind,必須實現,父類子類構造函數之間訪問權限大小無限制

static方法

  • static方法既可通過類名(類作用域)引用,也可通過實例對象引用
  • static方法名字按照類作用域對象名字查找規則查找,因此編譯期bind
  • static方法編譯期bind,但也必須實現
發佈了244 篇原創文章 · 獲贊 5 · 訪問量 10萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章