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();

 

有些東西還是要看實際的例子才好理解啊。

arrow
arrow
    文章標籤
    JAVA 強制轉型
    全站熱搜

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