Java的多態使用方法和C++基本是同樣的。java
看代碼吧。ide
public class ten { public static void main(String[] args) { Human guest = new Human(); BrokenCup hisCup = new BrokenCup(); // 雖然Human中的函數drink的參數一爲Cup, // 可是多態的機制決定了它調用的是繼承自Cup的BrokenCup guest.drink(hisCup, 10); } } class Human { void drink(Cup aCup, int w) { aCup.drinkWater(w); } } // 水杯 class Cup { private int water = 0; public void addWater(int w) { this.water = this.water + w; } public void drinkWater(int w) { this.water = this.water - w; } } // 破杯子 class BrokenCup extends Cup { // 重寫了父類的方法 public void addWater(int w) { System.out.println("shit, broken cup"); } public void drinkWater(int w) { System.out.println("oh, no water inside"); } }
輸出爲:函數
oh, no water inside
總結一下:this
1. Java中,全部的類都繼承自Object類。Object類提供了一些方法,好比toString()。咱們能夠在本身的類定義中覆蓋這些方法。spa
2. 咱們能夠將一個基類引用向下轉型(downcast)成爲衍生類的引用,但要求該基類引用所指向的對象已是所要downcast的衍生類對象。好比能夠將上面的hisCup向上轉型爲Cup類引用後,再向下轉型成爲BrokenCup類引用。orm