JAVA 的強制轉型
JAVA 程式碼
//作者:骷骷 //網誌:http://bekachu.pixnet.net/blog class OneMethod{ public void one(){ System.out.println("a"); } } class TwoMethod extends OneMethod{ public void one(){ System.out.println("b"); } public void two(){ System.out.println("c"); } } public class Test{ public static void main(String[] args) { OneMethod t=new TwoMethod(); t.one(); ((TwoMethod)t).two(); System.out.println("====="); int a=(int) 123L; System.out.println(a); long b=123; System.out.println(b); } } /*輸出結果: b c ===== 123 123 */
==========
骷骷以前有用過強制轉型,
不過只有在一些基礎型態用過,
碰到類別的強制轉型就有點一知半解,
經過骷骷試驗的結果:
首先還是先講基礎型態的好了,
基本上只要不是太離譜的都可以互轉,
那何謂太離譜呢?
像是大範圍強制轉型成小範圍時,
要小心當轉型的數值範圍超過小範圍,雖然還是可以轉,
但是結果可能會跟預期的不太一樣,
而小範圍轉型成大範圍的話,JAVA 會自動轉型。
接著,如果是類別強制轉型的話,必須要有繼承關係,
骷骷以前一直認為子類別比父類別大,
因為子類別的功能會越寫越多,當然比父類別強大的多,
但是這是錯誤的……JAVA 是認輩份的,父類別永遠比子類別大,
不過在現實中也是如此,
例如:動物是父類別,小熊是子類別,骷骷可以稱呼(宣告)小熊為動物。
類別中會遇到強制轉型的情況,例如上面的程式碼中,
使用父類別來稱呼子類別,
OneMethod t=new TwoMethod();
使用父類別的 one() 方法,但是實際上,
父類別的 one() 方法已經被子類別覆寫了,
所以出來的結果是子類別的 one() 方法,
t.one();
使用子類別的 two() 方法,但是實際上,
JAVA 認為目前是父類別的身份,找不到 two() 方法,
所以要強制轉型,暫時恢復子類別的身份,
才能使用子類別裡的 two() 方法,
((TwoMethod)t).two();
有些東西還是要看實際的例子才好理解啊。
文章標籤
全站熱搜
留言列表