前言:因為最近比較迷茫,工作比較輕松,所以准備再仔細學習一下Java
封裝:
是將類的某些信息隱藏在類的內部,不允許外部程序直接訪問,而是通過該類提供的方法來實現對隱藏信息的操作和訪問
封裝的優點:只能通過規定的方式來訪問數據;隱藏類的實現細節;方便加入控制語句(比如驗證參數合法性);方便修改實現(比如修改了屬性的類型,接口可以添加一次轉換)。
繼承:
繼承是使用已存在的類的定義作為基礎建立新類的技術,新類的定義可以增加新的數據或新的功能,也可以用父類的功能,但不能選擇性地繼承父類。簡單概括為,父類提供共性,子類補充特殊性。
使用繼承時的三個關鍵:子類擁有父類的所有屬性和方法,但只能調用非private的屬性和方法;子類可以對父類進行擴展,擁有自己的屬性和方法;子類可以自己實現父類的方法。
構造器:子類不能繼承父類的構造器,只能調用父類的非private構造器,使用super()。切記必須在子類構造器第一行調用。
protected 關鍵字:方便同一個包的類和子類訪問。
向上轉型:class A;class B extend A;A b = new B() 的使用,即B是A的意思。
切記謹慎使用繼承,理解is-a的關系。代碼重用可以考慮工具類,行為相同可以考慮接口。《Think in Java》提到:問一問自己是否需要從子類向父類進行向上轉型。如果必須向上轉型,則繼承是必要的,但是如果不需要,則應當好好考慮自己是否需要繼承。
多態:
所謂多態,就是指一個引用(類型)在不同的情況下的多種狀態。也可以理解為,多態是指通過指向父類的指針,來調用在不同子類中實現的方法。
在上面提到子類可以自己實現父類的方法。例如 class A;class B extend A;class C extend A;在B 和C中分別自己實現了A的某個函數,當A b = new B() A c = new C() 時,調用b,c 相同函數可能會返回不同的行為,因為父類的引用變量指向子類對象了。
對於繼承和接口實現的一些想法:
1,一個類只能繼承一個類,但是可以實現多個接口。
2,依賴倒轉原則: 依賴抽象(例如接口),不要依賴於實現。
3,合成/聚合復用原則(CARP): 盡量使用合成/聚合,而不是繼承關系達到復用的目的。
4,接口傳達的意思是:擁有某種功能,能干嘛,比如:Serializable代表可序列化的。
5,繼承傳達的是意思是:is-a,比如:貓 是一個 動物,貓就是動物的子類。