面向對象有三大特性:繼承,封裝,多態java
1.繼承:安全
(1)繼承的特色:A,java支持單根繼承,不支持多根繼承網站
B,java支持多層繼承(繼承體系)this
(2)細節注意:A.子類只能繼承父類的非私有成員(成員方法和成員變量)
B.子類不能繼承父類的構造方法,可是咱們能夠經過super去訪問父類的構造
spa
C.千萬不要由於部分功能而去使用繼承,在Java當中,咱們使用繼承體系的時候 應該遵循一個"is a"的原則設計
(3) 繼承中成員變量的關係:
a.子類的變量名和父類的變量名不一致時,各自找各自的
b.子類和的變量名和父類的變量名一致時:
1.先在子類局部中去尋找,有就使用
2.先在子類成員中去尋找,有就使用
3.在去父類的成員位置,有就使用,沒有就報錯
code
(4)繼承中構造方法的關係:
a.子類中的全部構造方法,都會默認訪問父類的無參構造。
b.爲何要訪問?
由於子類繼承父類會使用到父類的數據,因此子類必須先訪問父類的
無參構造,以便將父類的數據進行初始化。
注意:子類的構造默認的第一句代碼是super();
若是父類沒有提供無參構造,那麼會有什麼結果?
報錯;
如何解決?
a.給父類添加一個無參構造
對象
b.經過super關鍵字去訪問父類的其餘構造繼承
2.封裝:接口
在面向對象程式設計方法中,封裝(英語:Encapsulation)是指一種將抽象性函式接口的實現細節部份包裝、隱藏起來的方法。
封裝能夠被認爲是一個保護屏障,防止該類的代碼和數據被外部類定義的代碼隨機訪問。
要訪問該類的代碼和數據,必須經過嚴格的接口控制。
封裝最主要的功能在於咱們能修改本身的實現代碼,而不用修改那些調用咱們代碼的程序片斷。
適當的封裝可讓程式碼更容易理解與維護,也增強了程式碼的安全性。
1. 良好的封裝可以減小耦合。
2. 類內部的結構能夠自由修改。
3. 能夠對成員變量進行更精確的控制。
4. 隱藏信息,實現細節。
1. 修改屬性的可見性來限制對屬性的訪問(通常限制爲private),例如:
這段代碼中,將 name 和 age 屬性設置爲私有的,只能本類才能訪問,其餘類都訪問不了,如此就對信息進行了隱藏。
2. 對每一個值屬性提供對外的公共方法訪問,也就是建立一對賦取值方法,用於對私有屬性的訪問,例如:
採用 this 關鍵字是爲了解決實例變量(private String name)和局部變量(setName(String name)中的name變量)之間發生的同名的衝突。
3.多態:
同一個對象,在不一樣時刻體現出來的不一樣狀態。
舉例:
貓是貓,貓是動物
多態的前提:
a.要有繼承關係
b.要存在方法的重寫
其實方法重寫不是多態必須的,可是不這樣作就沒有任何意義
c.要有父類的引用指向子類的對象
Fu fu = new Zi();
用代碼的實現下多態:
多態中成員訪問的特色:
a.成員變量
編譯期,看左邊,運行期看左邊
b.成員方法
編譯期,看左邊,運行期看右邊
c.構造方法
建立子類對象的時候,先訪問父類構造,對父類的數據進行初始化
d.靜態方法
編譯期,看左邊,運行期看左邊
除了成員方法,其他所有看左邊,由於成員方法存在方法重寫,重寫會覆蓋父類 因此運行看子類就能夠了
多態的好處:
a.提升了代碼的可維護性(繼承來體現)
b.提升的代碼的擴展性(由多態來體現)
多態的弊端:
不能使用子類的特有的功能。
解決方法:
a.直接建立子類對象便可(能夠,可是 不合適也不合理。並且很是耗內存)
b.把父類引用直接強制轉換爲子類引用(向下轉型)
注:部分筆記來源於其餘網站!!!