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(); 類似,

所以當使用強制轉型時,也會出現類似的錯誤,

骷骷在此記錄下來。

 

強制轉型的使用時機,骷骷覺得是用來強制恢復原型用的,

就是子類別可以假裝(宣告)成父類別,

然後強制轉型可以暫時恢復子類別的身份,

就可以解除原本父類別的封印,

使用原本就擁有的能力(方法、成員)。

arrow
arrow
    文章標籤
    JAVA 覆寫回傳值
    全站熱搜

    骷骷 發表在 痞客邦 留言(0) 人氣()