轉載,原文來自http://blog.sina.com.cn/s/blog_5f79a56a0100c6ig.html
眾所周知,java中的物件導向的三大基本特徵是:【封裝】、【繼承】、【多態】
一、封裝
對象要有一個明確的邊界;邊界的劃分(對象各司其職、對象的粒度、對象的可重用性)
具體來說:
1.屬性: 私人 private(提供set和get方法)
2.方法: 公開或私人public/private
3.方法聲明 --> 公開
方法實現 --> 隱藏
實現改變時,對對象的使用者沒有影響。
二、繼承
共性放到父類,特性放到子類;子類,父類 --> 其實就是特殊 --> 一般
1.關鍵字: extends 例如:Dog extends Animal{}
2.java中一個類最多隻能有一個直接的父類,即單繼承(具有簡單性、樹形結構),
C++中是單繼承
java中要實現多繼承,通過介面來實現。
3.父類中所有屬性和方法都能繼承給子類;父類中的私人方法不能繼承給子類。
4.java中的存取修飾詞
存取修飾詞 |
存取權限 |
繼承 |
private |
本類內部 |
不能繼承 |
default |
本類+同包 |
同包子類可以繼承 |
protected |
本類+同包+不同子包 |
可以繼承 |
public |
公開 |
可以繼承 |
5.構造對象過程
(1)分配空間
(2)遞迴地構造父類對象
a. 父類 初始化屬性
b. 父類 構造方法
(3)初始化屬性
(4)調用構造方法
6.super
用法:
super() 調用父類的構造方法,只能出現在構造方法的第一行
super.方法名 super表示父類的對象,通過它去調用父類的方法
注意:在寫類的時候,一定要寫預設無參的構造方法,如果一個構造方法的
第一句既不是this(),也不是super()時,那麼就會在這裡隱含的調用
他的父類的無參的構造方法,即隱含的有super()。
三、多態
運行時多態。
子類的對象放在父類的引用中,例如 Animal a=new Dog,子類對象當父類對象來使用。
1.多態原則:
(1)物件類型不變
(2)只能用引用調用其參考型別中定義的方法
(3)運行時,根據對象的實際類型去找子類覆蓋之後的方法
例子:
有Animal類中有eat()和sleep()兩個方法,sleep()中睡8小時;子類Dog中有
eat()方法,sleep()方法中睡6小時,還有wangwang()方法。
現建立Animal a=new Dog(); 不能調用a.wangwang(),調用a.sleep()輸出睡6小時。
2.對象的強制轉換
格式: 引用 instanceof 類型
引用所指的對象是否與類相符,傳回值boolean值。
用法:
Animal a=new Cat();
if(a instanceof Dog)
{
Dog d=(Dog)a;
d.wangwang();
}
說明:如果只有Dog d=(Dog)a;執行階段錯誤,因為a是Cat而不是Dog (多態原則第一條)
3.多態的靈活變換
(1)用於參數列表上:
public void m(A a){} 可以用A類的任何子類對象作為參數
(2)用在傳回值上:
public A m(){} 這個方法可能返回A類的任何子類對象