JAVA 面向對象中的多態
阿新 • • 發佈:2019-03-20
println main 使用 color 實現類 處理 進行 bubuko 又是
多態是繼封裝、繼承之後,面向對象的第三大特性。 現實事物經常會體現出多種形態,如學生,學生是人的一種,則一個具體的同學張三既是學生也是人,即出現兩種形態。 Java作為面向對象的語言,同樣可以描述一個事物的多種形態。如Student類繼承了Person類,一個Student的對象便既是Student,又是Person。 Java中多態的代碼體現在一個子類對象(實現類對象)既可以給這個子類(實現類對象)引用變量賦值,又可以給這個子類(實現類對象)的父類(接口)變量賦值。 如Student類可以為Person類的子類。那麽一個Student對象既可以賦值給一個Student類型的引用,也可以賦值給一個Person類型的引用。 最終多態體現為父類引用變量可以指向子類對象。 多態的前提是必須有子父類關系或者類實現接口關系,否則無法完成多態。 在使用多態後的父類引用變量調用方法時,會調用子類重寫後的方法。
多態是同一個行為具有多個不同表現形式或形態的能力。
多態就是同一個接口,使用不同的實例而執行不同操作。
1 public class Father {
2 public void say() {
3 System.out.println("This is Father‘s word");
4 myhobby();
5 }
6
7 public void myhobby() {
8 System.out.println("This is Father‘s hobby");
9 }
10 }
1 public class Son extends Father {
2
3 private String sonname;
4
5 public String getSonname() {
6 return sonname;
7 }
8
9 public void setSonname(String sonname) {
10 this.sonname = sonname;
11 }
12
13 public void say(){
14 System.out.println("This is Son‘s word");
15 }
16
17
18 public void myhobby(String sonname){
19 System.out.println("This‘s Son‘s hobby for String " + sonname);
20 }
21
22 }
我是測試類
public class testDuotai {
public static void main(String[] args) {
Father father1 = new Son();
System.out.println("實例化一個Son對象,用父親接收");
father1.say();
father1.myhobby();
Son son = new Son();
System.out.println("實例化一個Son對象,用Son接收");
son.say();
son.myhobby();
son.myhobby(son.getSonname());
}
}
Java實現多態有三個必要條件:繼承、重寫、向上轉型。
繼承:在多態中必須存在有繼承關系的子類和父類。
重寫:子類對父類中某些方法進行重新定義,在調用這些方法時就會調用子類的方法。
向上轉型:在多態中需要將子類的引用賦給父類對象,只有這樣該引用才能夠具備技能調用父類的方法和子類的方法。
只有滿足了上述三個條件,我們才能夠在同一個繼承結構中使用統一的邏輯實現代碼處理不同的對象,從而達到執行不同的行為。
對於Java而言,它多態的實現機制遵循一個原則:
當超類對象引用變量引用子類對象時,被引用對象的類型而不是引用變量的類型決定了調用誰的成員方法,但是這個被調用的方法必須是在超類中定義過的,也就是說被子類覆蓋的方法。
JAVA 面向對象中的多態