JAVA裡沒有多繼承一個類之能有一個父類
而繼承的表現就是多態一個父類可以有多個子類而在子類裡可以重寫父類的方法(例如方法print())這樣每個子類裡重寫的代碼不一樣自然表現形式就不一樣這樣用父類的變量去引用不同的子類在調用這個相同的方法print()的時候得到的結果和表現形式就不一樣了這就是多態相同的消息(也就是調用相同的方法)會有不同的結果舉例說明
//父類
public class Father{
//父類有一個打孩子方法
public void hitChild(){}
}
//子類
public class Son extends Father{
//重寫父類打孩子方法
public void hitChild(){
Systemoutprintln(為什麼打我?我做錯什麼了!); }
}
//子類
public class Son extends Father{
//重寫父類打孩子方法 public void hitChild(){
Systemoutprintln(我知道錯了別打了!); }
}
//子類
public class Son extends Father{
//重寫父類打孩子方法 public void hitChild(){
Systemoutprintln(我跑你打不著!); }
}
//測試類
public class Test{
public static void main(String args[]){
Father father;
father = new Son();
fatherhitChild();
father = new Son();
fatherhitChild();
father = new Son();
fatherhitChild();
}
}
都調用了相同的方法出現了不同的結果!這就是多態的表現!
JAVA中沒有多繼承而用接口實現了多繼承!一個類或是可以同時實現多個接口!(就相當於C++裡一個類同時繼承了多個類!)例如
public class Son implements FatherFatherFather{
}
接口有利於代碼功能的擴展(增加新的功能)!而繼承則有利於代碼功能的修改(把舊的功能改成新的功能)!這裡舊功能的修改和新功能的增加前提是不修改舊的功能舊的功能仍然可以使用!舊類的代碼也不做修改!
接著上面的繼承舉例上面例子中的子類我們統稱為一代子類
用繼承修改舊的功能
現在如果一代Son的功能打孩子也就是方法hitChild()裡邊的功能實現有問題我們要把具體實現修改掉那麼我們可以重新寫一個新的二代子類Son繼承自一代子類Son並重寫其hitChild()方法
//二代子類
public class Son extends Son{
//重寫父類打孩子方法
public void hitChild(){ Systemoutprintln(我是二代子類對此方法的新實現);
}
}
用接口實現增加新的功能
現在類Son已經有了打孩子功能(也就是方法)而我們有了新的需求我們需要它還要有一個新的功能寵孩子(新方法pet();)而舊的代碼不能動!那麼我們可以定義一個新的接口(PetInterFace)接口裡定義這個方法pet()的聲明再重新寫一個二代子類Son讓它先繼承類Son同時實現接口 PetInterFace!並實現接口裡的 pet()方法!
//新接口
public interface PetInterFace{
//新功能方法 public void pet();
}
//二代子類
public class Son extends Son implements PetInterFace{
//實現接口方法
public void pet(){
Systemoutprintln(父親很愛我!);
}
}
這樣這個二代子類即有了老的方法又有新的功能!
From:http://tw.wingwit.com/Article/program/Java/hx/201311/26917.html