Java中的強制型別轉換

2021-09-01 01:52:02 字數 1457 閱讀 9027

class one 

}class two extends one

public void dosth()

}

一、向上轉型

one t = new two(); //向上轉型,即父類引用指向子類物件,此時子類物件的型別為父類的型別

t.foo();

t.dosth();//編譯錯誤

結論:向上轉型是安全的,但可能會丟失子類的某些特性

二、向下轉型

one t = new two();

t.foo();

t = (two)t;

t.dosth();//編譯錯誤

這樣強制轉換不成功,t 的型別仍然是one。

one t = new two(); //向上轉型

two t1 = (two)t; // 向下轉型

t1.dosth();

向下轉型成功。再例如:

object obj = new int ;

int somearray = (int)obj;

for (int i : somearray) system.out.print(i + " ");

再舉個例子:有兩個類,father是父類,son類繼承自father。

father f1 =new son() ; //這就叫upcasting(向上轉型)

//現在f1 引用乙個指向乙個son 物件

son s1 = (son)f1 ;  //這個叫downcasting(向下轉型)

//現在f1還是指向son物件

第二個例子:

father f2 =new father();

son s2=(son)f2;     //出錯,子類引用不能直接指向父類物件

你或許會問,在第乙個例子中:son s1=(son)f1;為什麼是正確的呢?

很簡單因為f1指向指向乙個子類物件,father f1=new son();子類s1引用當然可以指向子類物件了。

而f2被傳給了乙個father物件,father f2=new father();子類s1引用不能指向父類物件。

總結:1.父類引用指向子類物件,子類引用不能指向父類物件。

2.把子類物件直接賦給父類引用叫upcasting向上轉型,向上轉型不用強制轉型。

如father f1=new son();

3.把指向子類物件的父類引用賦給子類引用叫向下轉型(downcasting),要強制轉型。

如f1就是乙個指向子類物件的父類引用,把f1賦給子類引用s1 即son s1=(son)f1;

其中f1前面的(son)必須新增,進行強制轉換。

4.upcasting 會丟失子類特有的方法(下面有說明),但是子類overriding 父類的方法,子類方法有效

5.向上轉型的作用, 減少重複**

java 型別轉換 強制型別轉換

今天在寫乙個demo時,碰到型別轉換問題。發現兩個不相干的class進行強制型別轉換編譯是不會通過的,但是。乙個class到乙個不相干的inte ce強制型別轉換是可以編譯通過的。可能有人感覺知道這沒什麼意義,但是感覺還是記錄下。雖然有自動型別轉換,以及強制型別轉換,但有時強制型別轉換不能通過時,可...

Java強制型別轉換

型別轉化 將乙個型別強制轉換成另外乙個型別的過程。數值型別之間的合法型別轉換 乙個表示式中要是有不同型別的數值,先要將運算元轉換為同一種型別,然後再進行計算。數值型別之間的強制型別轉換 語法格式 在圓括號中給出想要轉換的目標型別,後面緊跟待轉換的變數名。public static void main...

matlab中強制型別轉換 型別轉換

上一期提到 隱式型別強制轉換 implicit type coercion 隱式型別強制轉換會造成意外。為了避免出現意外,c 提供了明式型別轉換,允許程式設計師通過使用型別轉換操作 cast operator 主動轉換資料的型別。型別轉換操作也可直接稱為型別轉換 type conversion ty...