Java向下轉型和向上轉型

class Base{
	public void print() {
		System.out.println("Run Base's Print()");
	}
}
class Son1 extends Base{
	public void print() {
		System.out.println("Run Son1's Print()");
	}
}
class Son2 extends Base{
	public void print() {
		System.out.println("Run Son2's Print()");
	}
}
public class Test {
	public static void main(String[] args) {
		//向上轉型
		Base son1 = new Son1(); //我的理解是,實際上Base類型的引用指向的仍然是Son1類型的對象,所以調用其實還是子類的東西
		System.out.println(son1.getClass());  //此時使用getClass類其實仍然能夠得到Son1()
		son1.print(); //調用的仍然是Son1的print方法
		Son1 tmp = (Son1)son1; //如果son1之前確實是Son1類型,那麼運行不會報錯
		Son2 tmp2 = (Son2)son1; //如果son1之前不是Son2類型,編譯不會出錯,但是運行會報錯
		//因此,直接向下轉型具有一定的風險,所以可以使用instance of 來判斷
		if(son1 instanceof Son1) {
			Son1 tmp3 = (Son1)son1;
		}
		if(son1 instanceof Son2) {
			Son2 tmp4 = (Son2)son1;	
		}
	}
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章