1. 程式人生 > >JAVA中如何用介面實現多繼承和多型 (非常好)

JAVA中如何用介面實現多繼承和多型 (非常好)


---------------------------------------------------------------
多型
1.JAVA裡沒有多繼承,一個類之能有一個父類。而繼承的表現就是多型。一個父類可以有多個子類,而在子類裡可以重寫父類的方法(例如方法print()),這樣每個子類裡重寫的程式碼不一樣,自然表現形式就不一樣。這樣用父類的變數去引用不同的子類,在呼叫這個相同的方法print()的時候得到的結果和表現形式就不一樣了,這就是多型,相同的訊息(也就是呼叫相同的方法)會有不同的結果。舉例說明:
//父類
public class Father{
   //父類有一個打孩子方法
   public void hitChild(){
   }
}
//子類1
public class Son1 extends Father{
   //重寫父類打孩子方法
   public void hitChild(){
      System.out.println("為什麼打我?我做錯什麼了!");
   }
}
//子類2
public class Son2 extends Father{
   //重寫父類打孩子方法
   public void hitChild(){
      System.out.println("我知道錯了,別打了!");
   }
}
//子類3
public class Son3 extends Father{
   //重寫父類打孩子方法
   public void hitChild(){
      System.out.println("我跑,你打不著!");
   }
}

//測試類
public class Test{
   public static void main(String args[]){
      Father father;

      father = new Son1();
      father.hitChild();

      father = new Son2();
      father.hitChild();

      father = new Son3();
      father.hitChild();
   }
}
都呼叫了相同的方法,出現了不同的結果!這就是多型的表現!


2.JAVA中沒有多繼承,而用介面實現了多繼承!一個類或是可以同時實現多個介面!(就相當於C++裡一個類同時繼承了多個類!)例如:
public class Son implements Father1,Father2,Father3{
   
}

介面有利於程式碼功能的擴充套件(增加新的功能)!而繼承則有利於程式碼功能的修改(把舊的功能改成新的功能)!這裡舊功能的修改和新功能的增加前提是不修改舊的功能,舊的功能仍然可以使用!舊類的程式碼也不做修改!

接著上面的繼承舉例:上面例子中的子類我們統稱為一代子類

1.用繼承修改舊的功能。
現在如果一代Son1的功能打孩子,也就是方法hitChild()裡邊的功能實現有問題,我們要把具體實現修改掉,那麼我們可以重新寫一個新的二代子類Son11繼承自一代子類Son1,並重寫其hitChild()方法。

//二代子類
public class Son11 extends Son1{
   //重寫父類打孩子方法
   public void hitChild(){
      System.out.println("我是二代子類對此方法的新實現");
   }
}

2.用介面實現增加新的功能。
現在類Son1已經有了‘打孩子’功能(也就是方法),而我們有了新的需求,我們需要它還要有一個新的功能‘寵孩子’(新方法pet();)。而舊的程式碼不能動!那麼我們可以定義一個新的介面(PetInterFace),接口裡定義這個方法pet()的宣告。再重新寫一個二代子類Son11,讓它先繼承類Son1,同時實現介面 PetInterFace!並實現接口裡的 pet()方法!

//新介面
public interface PetInterFace{
   //新功能方法
   public void pet();
}

//二代子類
public class Son11 extends Son1 implements PetInterFace{
   //實現介面方法
   public void pet(){
      System.out.println("父親很愛我!");
   }
}
這樣這個二代子類即有了老的方法,又有新的功能!