下面就是面向對象的一些補充內容
- final的用法
- final修飾的類,不能被繼承。
- final修飾的方法,不能被子類重寫。
- final修飾的變量爲常量,只能賦值一次。
- final的舉例
- String就是被final修飾的類,所以String不能被繼承。
- Math中的PI就是被final修飾,表示不能被再次賦值。
- 使用final修飾方法的原因
- 第一、把方法鎖定,防止任何繼承類修改它的意義和實現。
- 第二、高效。編譯器在遇到調用final方法時候會轉入內嵌機制,大大提高執行效率。
- 訪問修飾符的區別
- public:可以被所有其他類所訪問。
- protected:自身,子類及同一個包中類可以訪問。
- default(默認):同一包中的類可以訪問,聲明時沒有加修飾符,認爲是friendly。
- private:只能被自己訪問和修改。
- 注意:
-
- Java的訪問控制是停留在編譯層的,也就是它不會在.class文件中留下任何的痕跡,只在編譯的時候進行訪問控制的檢查。
- 其實,通過反射的手段,是可以訪問任何包下任何類中的成員,例如,訪問類的私有成員也是可能的。
-
- 範圍圖:
-
訪問修飾符\作用範圍 所在類 同一包內其他類 其他包內子類 其他包內非子類 private 可以訪問 不可以 不可以 不可以 缺省 可以 可以 不可以 不可以 protected 可以 可以 可以 不可以 public 可以 可以 可以 可以
-
- 對象轉型的規則
- 一個基類的引用類型變量可以“指向”其子類的對象。
- 一個基類的引用不可以訪問其子類對象新增加的成員(屬性和方法)。
- 可以使用 (引用 變量 instanceof 類名) 來判斷該引用型變量所“指向”的對象是否屬於該類或該類的子類。
- 子類的對象可以當作基類的對象來使用稱作向上轉型(upcasting),反之稱爲向下轉型(downcasting)
- 什麼是單例模式
- 概念:JAVA單例模式確保一個類只有一個實例,自行提供這個實例並向整個系統提供這個實例。
- 特點:
- 一個類只能有一個實例;
- 自己創建這個實例;
- 整個系統都要使用這個實例。
- 應用場景:
- Singleton模式主要作用是保證在Java應用程序中,一個類Class只有一個實例存在。在很多操作中,比如建立目錄 數據庫連接都需要這樣的單線程操作。一些資源管理器常常設計成單例模式。
- 外部資源:譬如每臺計算機可以有若干個打印機,但只能有一個Printer Spooler,以避免兩個打印作業同時輸出到打印機中。每臺計算機可以有若干個通信端口,系統應當集中管理這些通信端口,以避免一個通信端口被兩個請求同時調用。
- 內部資源,譬如,大多數的軟件都有一個(甚至多個)屬性文件存放系統配置。這樣的系統應當由一個對象來管理這些屬性文件。
- 優點:
- 能避免實例重複創建;
- 應用於避免存在多個實例引起程序邏輯錯誤的場合;
- 較節約內存。
- 懶漢式(飽漢式):
-
public class Singleton { private static Singleton uniqueInstance = null; private Singleton() { // Exists only to defeat instantiation. } public static Singleton getInstance() { if (uniqueInstance == null) { uniqueInstance = new Singleton(); } return uniqueInstance; } // Other methods... }
-
- 餓漢式
-
class Single { private static Single onlyone = new Single(); private String name; public static Single getSingle() { return onlyone; } private Single() { } }
-
- 測試類
-
public class SingleTest { public static void main(String[] args) { Singleton s1 = Singleton.getInstance();//獲取自己對象的方法 Singleton s2 = Singleton.getInstance(); System.out.println(s1); System.out.println(s2); System.out.println(s1==s2); Single t1 = Single.getSingle(); Single t2 = Single.getSingle();//餓漢式 System.out.println(t1==t2); } }
-
- 懶漢式(又叫飽漢式)與餓漢式之間的區別:
- 懶漢式是該類方法第一次被調用的時候創建該類對象。
- 餓漢式是該類第一次加載的時候對象就已經創建好了在內存中準備調用。
以上內容就是面向對象相關的內容,當然面向對象還有很多的內容不能在有限的空間裏全部展示完,在後續的內容加以補充。
還有就是一般我們做項目的時候,我會將面向對象貫穿到項目裏面去說,將面向對象的真正的用法和設計方式體現在項目裏面去,在項目裏面使用面向對象的特性去開發,並設計項目的模塊,讓我們不再是代碼的搬運工,每一個編程人員都是軟件設計工程師。
精彩內容,請見下篇博客~!