Shape s = new Circle(); //upcasting: 將Circle對象upcast為Shape類型 s.draw();
Upcast(上傳)就是把對象的reference 當作基類的reference 來用.(注:java內(nèi)部是知道對象屬于什么類型的) 因為Derived class is a type of base class, 所以基類的reference (Shape s)能接受派生類(circle)的對象
當你想要通過一個公共的接口來操控一組類的時候,就可以使用抽象類了。通過動態(tài)綁定機制,那些符合方法特征的派生類方法將會得到調(diào)用。 abstract class {} 抽象類的方法可以使abstract的,也可以是非abstract。派生類繼續(xù)了一個abstract類,那他要么實現(xiàn)所有的abstract的method,要么把自己也變成abstract的。
//: c07:PolyConstrUCtors.java // Constructors and polymorphism // don't produce what you might eXPect. import com.bruceeckel.simpletest.*; abstract class Glyph { abstract void draw(); Glyph() { System.out.println("Glyph() before draw()"); draw();//假如你new一個派生類對象,并且在基類構(gòu)造函數(shù)里面調(diào)用了動態(tài)綁定的方法, //那么它會使用那個派生類覆寫后的版本。