1. 程式人生 > >面向對象三大特征之多態

面向對象三大特征之多態

cte ros string col AC 格式 參數 包裝 -s

面向對象的三大特征:封裝、繼承、多態。今天重點來看一下“多態”。

封裝

指一種將抽象性函式接口的實現細節部份包裝、隱藏起來的方法。將屬性或方法進行封裝,防止外部程序隨機訪問,加強代碼的安全性。

繼承

子類繼承父類的特征和行為,使得子類對象(實例)具有父類的實例域和方法,或子類從父類繼承方法,使得子類具有父類相同的行為。

子類繼承父類,使用extends關鍵字。

子類可以訪問父類那些屬性和方法?

private 本類
默認省略(default) 本類 同包
protected 本類 同包 非同包子類
public 本類 同包

非同包子類

其他任何包都可用

1 //類的繼承格式
2 
3 class 父類  {
4 
5 }
6 
7 class  子類  extends  父類{
8 
9 }

多態

終於進入到今天的重點了!

多態是同一種事物,由於條件的不同,展示出不同的結果。

在程序中多態就是同一種引用類型,由於使用不同的對象實例,而執行不同地操作。

例如:貓吃魚,狗啃骨頭。不是多態;

在動物界,有的小動物吃魚,有的小動物啃骨頭。就是多態。

多態的優點:

1. 消除類型之間的耦合關系

2. 可替換性

3. 可擴充性

  4. 接口性

5. 靈活性

6. 簡化性

 實現多態的條件:

① 子類繼承父類;

② 子類重寫父類方法;

③ 父類引用指向子類對象。保證了同一個父類引用類型,使用不同的子類對象實例,而執行不同的操作。

 1 /**
 2  * 樂器(Instrument)類包括:鋼琴(Piano)類、小提琴(Violin)類;
 3  * 樂器類必須是抽象類,其中要有抽象方法(保證子類重寫父類方法)
 4  * 各種樂器的彈奏( play )方法各不相同
 5  * 演奏家來演奏樂器
 6  */
 7 
 8 
 9
//樂器類 10 public abstract class Instrument { //抽象類 11 public abstract void play(); //抽象方法,子類必須重寫父類對象 12 } 13 14 //鋼琴類 15 public class Piano extends Instrument{ //繼承父類 16 public void play(){ //重寫方法 17 System.out.println("彈奏鋼琴"); //鋼琴彈奏方法 18 } 19 } 20 21 //小提琴類 22 public class Violin extends Instrument{ //繼承父類 23 public void play(){ //重寫方法 24 System.out.println("演奏小提琴"); //小提琴彈奏方法 25 } 26 } 27 28 //演奏家類 29 public class Artist { 30 public void make(Instrument i){ //傳入“樂器”參數,哪個樂器調用哪個方法 31 System.out.println("演奏家:"+name); 32 i.play(); 33 } 34 } 35 36 //Test類 37 public class Test { 38 public static void main(String[] args) { 39 Artist a=new Artist("xxx"); //父類引用指向子類對象 40 //相當於Instrument i = new Piano() ;實例化一個子類對象,i存的是一個地址。 41 a.make(new Piano()); //傳進的對象不同,可調用一樣的方法,結果不同。以 Piano 對象調用“演奏家類”中的 make 方法。 42 a.make(new Violin()); 43 } 44 }

執行以上程序,輸出結果為:

技術分享圖片

面向對象三大特征之多態