標籤:避免 overwrite instance 許可權 系統 類對象 機制 sub 設計
物件導向的三條主線:
1.類及類的成分
2.物件導向的三大特性 :封裝、繼承、多態
3.其他的關鍵字:this super import package abstract static final interface等
1.java程式是關注於類的設計。類從代碼的角度:並列關係! 從執行、設計的角度:關聯關係、繼承關係、彙總關係
class A{
}
class B{
A a = new A();
}
2.類的成分:屬性 方法 構造器 代碼塊 內部類
2.1 屬性:①變數的分類:成員變數(屬性 Field) vs 局部變數(方法的形參、方法內部、代碼塊內部)
基礎資料型別 (Elementary Data Type)(8種,不同的資料類型對應不同的預設初始化值) vs 引用資料類型(數組、類、介面 預設初始化值為null)
②屬性的聲明格式:修飾符 資料類型 變數名 = 初始化值;//java是強資料類型的語言
③對屬性的賦值的操作:1.預設初始化 2.顯式的初始化 3.代碼塊的初始化 4.構造器的初始化;5.調用方法、屬性進行賦值
2.2 方法 ①格式:修飾符 (其它的關鍵字:static/final/abstract)傳回值類型 方法名(形參列表){ //方法體 }
②方法的重載(overload) vs 方法的重寫(override overwrite)
③ 方法的參數傳遞機制:值傳遞(痛點)
2.3構造器 ①構造器的作用:1.建立類的對象 2.初始化對象的成員變數
②構造器也是可以重載的。
2.4 代碼塊 主要作用:用來初始化類的成員變數
分類:靜態代碼塊 vs 非靜態代碼塊
2.5 內部類 ①分類:成員內部類(static的成員 vs 非static的成員) vs 局部內部類(方法內部聲明的類)
②掌握 :①如何建立成員內部類的對象(如:建立Bird類和Dog類的對象)
②如何區分調用外部類、內部類的變數(尤其是變數重名時)
③局部內部類的使用 (見TestInnerClass1.java)
3. 類的初始化(建立類的對象)
3.1 如何建立類的對象。如: Person p = new Person(); Date d = new Date();
3.2 記憶體解析:
①棧:局部變數、對象的引用名、數組的引用名
堆:new 出來的“東西”
方法區:(字串常量池)
靜態域:存放類中靜態變數
②如何理解建立的對象在記憶體中載入的過程(理解)
3.3 子類對象執行個體化的全過程: SubClass sc = new SubClass();
4.物件導向的三大特性:
4.1 封裝性:
① 通過私人化類的成員變數,通過公用的getter和setter方法來調用和修改
② 還可以對類的其他結構進行“封裝”
③ 許可權修飾符:public protected 預設 private
4.2 繼承性:
通過讓一個類A繼承另一個類B,就可以擷取類B中的結構(主要的:屬性、方法、構造器)。子類:類A 父類:類B
>java中的類的繼承性:單繼承的。
4.3 多態性:
①體現:方法的重載與重寫 ; 子類對象的多態性 Person p = new Student();
②子類對象多態性的使用:虛擬方法調用。
③向上轉型 向下轉型 Student s = (Student)p; //建議在向下轉型之前: if ( p instanceof Student)避免出現ClassCastException的異常
5.其它關鍵字:
5.1 this:修飾屬性、方法、構造器 。表示:當前對象或當前正在建立的對象
5.2 super:修飾屬性、方法、構造器。顯式的調用父類的相應的結構,尤其是子父類有重名的方法、屬性
5.3 static : 修飾屬性、方法、代碼塊、內部類。隨著類的載入而載入!
5.4 final:修飾類、屬性、方法。表示“最終的”
5.5 abstract : 修飾類、方法
5.6 interface:表示是一個介面,(介面是與類並列的一個結構)。類與介面之間同時“implements”發生關係。
一個類多繼承的時候,介面中有方法名相同,並且傳回值類型也一樣的時候,系統會當成一個方法,若傳回值不一樣,編譯報錯沒法通過
介面中定義的屬性預設為 public static final的
幾口中定義的方法預設為public的,介面中的方法是沒有實現的。
5.7 package import 。。。
>abstract不能修飾屬性、構造器、不能與final static private共用。
java物件導向(串)