多态--Java
多態--Java
多態指的是同一個方法調用,由于對象不同可能會有不同的行為。編譯器類型指的是‘=’左邊的類型,運行時類型指的是‘=’右邊的類型。當有繼承關系時,可能發生編譯器 和運行期類型不同的情況,即編譯期類型是父類類型,運行期類型是子類類型。即:父類引用指向子類對象多態的要點:1、多態是方法的多態,不是屬性的多態(多態與屬性無關)。2、多態的存在要有3個必要條件:繼承,方法重寫,父類引用指向子類對象。3、父類引用指向子類對象后,用該父類對象引用調用子類重寫的方法,此時多態出現了。使用父類做方法的形參,是多態使用最多的場合。即使增加了新的子類,方法也無需改動。 符合開閉原則。擴展:面向對象的設計原則之一:開閉原則OCP1、對擴展開放,對修改關閉。2、軟件系統中的各種組件,如模塊、類、功能等,應該在不修改現有代碼的基礎上,引入新功能3、面向對象設計需要遵守的最高原則,也是最終目標。 public class Progarmmer {public String name = "proname";//子類繼承的public void writeCode(){System.out.println("writing code.......");}//子類重寫的public void eat(){System.out.println("程序員吃飯......");} } public class Chinese extends Progarmmer{public String name = "ChinaName";//從父類繼承一個方法 writeCode()//重寫父類的一個方法eat()public void eat(){System.out.println("中國程序員吃飯");}//子類特有的方法public void playShadowBoxing(){System.out.println("中國人在打太極拳");} } public class English extends Progarmmer{//重寫的方法public void eat(){System.out.println("英國人吃飯");}//特有的方法public void raceHose(){System.out.println("英國人在賽馬");} } public class Italian extends Progarmmer{//重寫eat方法public void eat(){System.out.println("意大利人在吃意大利面");}//特有的方法public void palyFootball(){System.out.println("意大利人在踢足球");} } public class Test {public static void showEat(Progarmmer pro){pro.eat();}public static void main(String[] args) {Progarmmer ch = new Chinese();showEat(ch);Progarmmer en = new English();showEat(en);Progarmmer it = new Italian();showEat(it);Progarmmer pro = new Progarmmer();showEat(pro);} }運行代碼得:
public class Test2 {public static void main(String[] args) {Chinese ch = new Chinese();ch.writeCode();//從父類繼承的ch.eat();//重寫父類的ch.playShadowBoxing();//子類特有的Progarmmer ch2 = new Chinese();ch2.writeCode();//非多態ch2.eat();} }執行代碼如下:
總結
- 上一篇: client mac addr不能开机进
- 下一篇: java使用计算器完成加法、减法运算