標籤:print tom 覆蓋 ++ ring 隱式 程式猿 over java程式
由於常常將Java和C++物件導向編程的原則搞亂,所以這次把相關要點分別總結一下,本文主要總結Java物件導向編程。
物件導向編程的三大特性是:繼承性(inheritance), 多態性(polymorphism)和封裝性(encapsulation)。
一. 繼承性
[類修飾詞列表] class 類名 [extends 父類名] [implements 借口列表名] { 類體 }
class Employee {public int workYear;public Employee() { workYear = 1; }}class Teacher extends Employee {public int classHour;public Teacher() { classHour = 10; }}
- 每一個類有且僅有一個直接父類,但能夠實現多個介面
- 當前定義的類的構造方法必須在其第一句調用其直接父類的構造方法。格式為:
super(參數列表);
假設程式猿沒有進行顯式調用,則JVM會自己主動隱式調用不帶不論什麼參數的父類構造方法,即:super()
- 子類和父類之間能夠進行類型轉換
(1) 將子類型資料轉換為父類型資料能夠直接採用隱式類型轉換
(2) 將父類型資料轉換為子類型資料須要採用強制類型轉換,且要保證執行時的正確性。
// correctTeacher tom = new Teacher();Employee a = tom;Teacher b = (Teacher) a;// runtime errorEmployee a = new Employee();Teacher b = (Teacher) a;
- 能夠用instanceof 來推斷一個對象是不是某個類的執行個體對象。
Teacher a = new Teacher();Employee b = new Employee();Employee c = a;System.out.println((b instanceof Teacher)); // falseSystem.out.println((c instanceof Employee)); // trueSystem.out.println((c instanceof Teacher)); // true
二. 多態性靜態多態性
靜態多態性是指在同一個類中同名方法在功能上的重載(overload)。
動態多態性動態多態性是指子類的成員方法對其父類同樣聲明的成員方法的覆蓋(override)。這裡的“同樣聲明”指的是除了方法修飾詞外全然同樣。利用動態多態效能夠通過父類型的引用調用子類型的方法。
class Employee {public int workYear;public Employee() { workYear = 1; } public printInfo() { System.out.println("This employee has worked for " + workYear + " years."); }}class Teacher extends Employee {public int classHour;public Teacher() { classHour = 10; } public printInfo() {System.out.println("This employee has worked for " + workYear + " years."); System.out.println("This teacher has worked for " + classHour + " hours.");}}public class Main {public static void main(String[] args) {Employee a = new Teacher();a.printInfo();}}
- 在子類中定義與父類中同名的成員域不僅與多態性沒有關係。並且不提倡
- 能夠用superkeyword調用父類中被屏蔽的成員方法和成員域,即:super.xxx
- 動態多態性僅僅針對非靜態成員方法,即靜態成員方法不具有動態多態性:當在子類和父類的類體中定義了具有全然同樣聲明的靜態成員方法。且類型為父類的變數a指向子類的執行個體對象時,通過變數a調用該靜態成員方法將調用在父類類體中定義的靜態成員方法。
三. 封裝性這裡主要須要搞清楚類成員的訪問控制模式及相應的訪問範圍,例如以下表:
* 上述圖片來自《Java程式設計教程》 第2版。雍俊海編著
至此,Java中物件導向的三大特性討論完成,下一篇部落格將會討論抽象類別、介面和內部類等內容。
Java物件導向編程(一)