面向對象三大特征之多態
阿新 • • 發佈:2018-04-08
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 }
執行以上程序,輸出結果為:
面向對象三大特征之多態