1.抽象類與接口
1.1.抽象方法,abstract修飾的方法,特點如下,
- 抽象方法是沒有方法體,abstract Double getArea();
- 抽象方法必須定義在抽象類中
- 子類必須去覆蓋該方法,抽象方法不能是private,不能使用final修飾,不能同時使用static修飾
1.2.抽象類
- 抽象類是不能直接創建對象的(沒有方法體)
- 抽象類裏面可以有抽象方法和非抽象方法,非抽象方法黑子類調用的
- 子類沒有去覆蓋抽象方法,把子類也變成抽象類
- 構造方法不能定義爲私有的(子類要繼承)
- 抽象類不能使用final去修飾
1.3.抽象類的命名一般在前面加上Abstract,抽象類必須有子類纔有意義
2.接口,是一種規範,使用抽象方法定義一組功能。方法必須被實現。
2.1.接口的命名前面加 I,結尾加上able。接口是特殊的抽象類。class文件,方法前面自動加上public abstract。
- 接口是沒有構造器的,接口不能被創建的。
- 接口中定義的變量都是全局的靜態常量。反編譯變量之後可以看到 public static final
- 接口中定義的方法都是公共的抽象方法(class文件,方法前面自動加上public abstract)
- 接口當中可以定義內部類,內部類也是public abstract
- 類是單繼承,接口可以多繼承
2.3.接口的實現
- 在實現類當中,必須覆蓋接口中的方法,必須是public的。
- 接口也是父類,編譯的時候看左邊,運行的時候看右邊。
- 面向接口編程,多態
2.4.接口和抽象類的區別
- 相同點
- 都是被其它類實現或繼承
- 都不能被實例化
- 都可以定義抽象方法,定義的抽象方法,子類必須覆蓋
- 不同點
- 接口中沒有構造器,抽象類中有構造器
- 抽象類可以有抽象方法和普通方法,接口中只能是抽象方法,不能有普通方法。(帶有方法體的是普通方法)
- 接口中的變量默認public static final 靜態常量
- 接口中的方法是public abstract 方法名
3.面向接口編程,把實現類的對象賦值給接口類型的變量(多態)
- 多態的好處,屏蔽了不同類的之間的實現差異,從而達到通用編程
4.內部類,
- 增強封裝,不允許其他類使用
- 增加了代碼的維護性
- 內部類可以直接訪問外部類的成員
4.1內部類的劃分
- 實例內部類:定義在類中的內部類,沒有任何修飾符
- 靜態內部類:static修飾的內部類
- 局部內部類:定義在方法中的內部類
- 匿名內部類:屬於局部內部類中的一種
4.2.實例內部類,屬於對象的內部類,不屬於類的,不能用static修飾
- 使用內部類必須創建外部類
- 內部類可以直接訪問外部類的成員
- 在內部類中不能有靜態成員,內部類是屬於外部類的成員
4.3.靜態內部類
- 靜態內部類不需要創建外部對象
- 在靜態內部類中,是沒有外部類的引用的
- 靜態內部類可以使用外部類的靜態成員
4.3.局部內部類
- 不能使用一些修飾符public,只能在方法中使用
- 局部內部類不能包含靜態變量
- 使用局部變量的本質是final的
4.4.匿名內部類,沒有名字的局部內部類(安卓用的比較多)
- new 父類的構造器 或者 接口 (){ }
- 必須要有父類或者實現了接口
5.枚舉,表示一個事件的固定狀態
- enum 修飾,枚舉是一個特殊的類
- 枚舉不能創建對象,構造器私有化
- 可以和switch配合使用