Java多態有編譯時多態和運行時多態


  多態有編譯時多態和運行時多態。

  第一個是通過方法重載實現;

  第二個是通過方法覆蓋實現(子類覆蓋父類方法)。

  第一種就是我們調用方法是不用區分參數類型,程序會自動執行相應方法,如:加法運算,可以使int相加,可以是double相加,都是同一個方法名。

  第二種就是動態綁定,使用父類引用指向子類對象,再調用某一父類中的方法時,不同子類會表現出不同結果。

  這樣的作用就是擴展性極好,玩過網游的話應該知道游戲中有不同的角色,它們都有一個父類,它們做相同動作時表現出來的效果就會不一樣,比如跑,魔法師的跑跟戰士的跑就不會一樣,這就是倆者都覆蓋了父類中的跑方法,各自有自己的現實,表現出來多態。如果有一天你想再加個角色,只用再寫一個類繼承該父類,覆蓋其中的跑方法就行了,其他代碼不用怎么改,所以可維護性也很好。這一個小的程序或許你體會不到多態的強度作用。

  其實說到多態就是面向接口編程,它不和具體類進行掛鈎了比如你沒用多態的話,你沒實例化一個對象,就要new一下,那假如你那天改變了需求了呢?那是不是又要改里面的?這樣不好,所以你可以通過多態,把需要相似的給提出來,然后繼承它這樣以后需要擴展你僅僅只是繼承而已。這樣就...展開

  追問

  am=new Dog();

  am.roar();改為

  Dog dog=new Dog();

  dog.roar();

  這實現的功能不是一樣嗎?

  追答給你個例子吧!。。好好體會體會。

  假設有一個類 叫 鳥類,它擁有屬性翅膀,擁有方法鳴叫,如下

  public class Bird{

  private Wing wing;

  public void moo(){

  System.out.println("鳥叫聲");

  }

  }

  鳥類封裝了 翅膀類和moo方法;另外有兩個類都繼承鳥類並重寫了moo方法,分別是鸚鵡和麻雀如下:

  鸚鵡類:

  public class Parrot extends Bird{

  public void moo(){

  System.out.println("鸚鵡的叫聲");

  }

  }

  麻雀類:

  public class Sparrow extends Bird{

  public void moo(){

  System.out.println("麻雀的叫聲");

  }

  }

  方法重寫應該懂吧,不懂自己找書看吧;然后你有個妻子她想聽鳥叫,就有個妻子類

  public class Wife{

  public void listen(Bird bird){

  bird.moo();

  }

  public static void main(String[] args) {

  new Wife().listen(new Parrot());

  }

  }

  多態實現了動態綁定,讓程序有了很好的擴展性,比如你以后想買一只燕子送給你妻子,就只需要寫個燕子類Swallow繼承Bird方法就可以了,而不需要再在妻子類里添加一個方法listen(Swallow swallow)……上面編碼沒用編譯器,可能有錯誤,請諒解 說得夠詳細了吧,感謝世界上有我這么好的人吧 ^_^

  來自:多態


注意!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



 
  © 2014-2022 ITdaan.com 联系我们: