一、多態polymiorphism
多態:
多態指的是編譯時類型變化,而運行時類型不變。
多態分兩種:
編譯時多態:編譯時動態重載.
運行時多態:指一個對象可以具有多個類型
- 運行時多態的三原則:(應用時爲覆蓋)
- 對象不變;(改變的是主觀認識)
- 對於對象的調用只能限於編譯時類型的方法,如調用運行時類型方法就會報錯。
Animal a=new Dog();對象a的編譯時類型爲Animal,運行時類型爲dog。
注意:編譯時類型一定要是運行時類型的父類(或者同類型)。
對於語句:Dog d=(Dog)a。將d強制聲明爲a類型,此時d爲Dog(),此時d就可以調用運行時類型。注意:a和d指向同一對象。 - 在程序的運行時,動態類型判定。運行時調用運行時類型,即它調用覆蓋後的方法。
二、封裝Encapsulation
摘要:
類(Class)— 抽象的數據類型,用來描述某一類具有相同特性的對象。
類是一種複雜的數據類型,它是將不同類型的數據和與這些數據相關的操作封裝在一起的集合體。這有點像C語言中的結構,唯一不同的就是結構沒有定義所說的“數據相關的操作”,“數據相關的操作”就是我們平常經常看到的“方法”,因此,類具有更高的抽象性,類中的數據具有隱藏性,類還具有封裝性。
封裝的特點:
- 隱藏實現細節
- 爲所有用戶提供統一界面
- 增強可維護性
三、繼承
- 是“is a” 的關係
- 聲明的形式 :
public class Manager extends Employee {…}
- Java是一個單一繼承的語言 ---- 一個類只有一個直接父類,如果沒有聲明父類,則默認的父類爲java.lang.Object
特點
- 構造方法不能被繼承
- 方法和屬性可以被繼承
- 子類的構造方法隱含的調用父類的默認構造方法
- 如果父類中沒有默認的構造方法,則應該在子類的構造方法的第一行明確的聲明調用父類中其他的構造方法。如下形式:
super(…)
四、方法的重載(重寫)overloading
特點:
- 方法名相同
- 參數類型一定不同
- 返回值可以相同也可以不同
例如:
public class OverloadingTest {
public void print(int i) {}
public void print(float f) {}
public String print() {
return "Hello";
}
protected URL print(String s) throws
MalformedURLException {
return new URL(s);
}
}
五、方法的覆蓋
特點:
- 方法名相同,參數類型相同,返回值也相同
- 訪問權限不能更封閉
- 拋出異常類型不能更寬泛
六、權限
|Modifiers|Inside class|The same package|Subclass|other|
|:-|:-|:-|:-|:-|
|public|Yes|Yes|Yes|Yes|
|protected|Yes|Yes|Yes|No|
|Default|Yes|Yes|NO|No|
|private|Yes|No|No|No|