JAVA 覆寫回傳值
JAVA 程式碼
//作者:骷骷 //網誌:http://bekachu.pixnet.net/blog class A{ public void print(){ System.out.println("A"); } } class B extends A{ public void print(){ System.out.println("B"); } } class F{ public A get(){ return new A(); } } class S extends F{ public B get(){ return new B(); } } //編譯會不通過 //class SS extends S{ // // public A get(){ // return new A(); // } //} class SS2 extends S{ public B get(){ return (B) new A(); } } public class Test{ public static void main(String[] args) { new F().get().print(); new S().get().print(); SS2 notGood=new SS2(); //編譯沒問題,但是執行會出錯 //notGood.get(); } } /*輸出結果: A B */
==========
跟上一篇的內容類似,JAVA 覆寫回傳值也是必須有繼承關係,
如果要重新覆寫方法的回傳值,那只能用子類別來進行覆寫,
觀念跟 父類別 A=new 子類別B(); 類似,
所以當使用強制轉型時,也會出現類似的錯誤,
骷骷在此記錄下來。
強制轉型的使用時機,骷骷覺得是用來強制恢復原型用的,
就是子類別可以假裝(宣告)成父類別,
然後強制轉型可以暫時恢復子類別的身份,
就可以解除原本父類別的封印,
使用原本就擁有的能力(方法、成員)。
文章標籤
全站熱搜