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...