Java | 向下轉型與運行時類型識別


向上轉型(在繼承層次中向上移動)會丟失具體的類型信息,但是向上轉型是安全的,因為基類不會具有大於導出類的接口。所以,通過基類接口發送的信息保證都能被接受。


向下轉型,即在繼承層次中向下移動,能夠獲取類型信息,但是必須要有某種方法來確保向下轉型的正確性,使不致於貿然轉型到一種錯誤類型,進而發出該對象無法接受的消息。這樣做是不安全的。在C++中,這就需要執行一個特殊的操作來獲得安全的向下轉型。但是在Java中,所有類型都會得到檢查,即使我們只是進行一次普通的加括弧形式的類型轉換,在進入運行期間時仍然會對其進行檢查,以便保證它的確是所希望的那種類型。如果不是,就會返回一個ClassCastException(類型轉換異常)。這種在運行期間對類型進行檢查的行為稱作“運行時類型識別”(RTTI)


class Useful{
	public void f(){System.out.println("Useful-f()");}
	public void g(){System.out.println("Useful-g()");}
}

class MoreUseful extends Useful{
	public void f(){System.out.println("MoreUseful-f()");}
	public void g(){System.out.println("MoreUseful-g()");}
	public void u(){System.out.println("MoreUseful-u()");}
	public void v(){System.out.println("MoreUseful-v()");}
	public void w(){System.out.println("MoreUseful-w()");}
}

public class RTTI{
	public static void main(String[] args){
		Useful[] x={
			new Useful(),
			new MoreUseful()
		};
		x[0].f();
		x[1].g();
		((MoreUseful)x[1]).u();
		((MoreUseful)x[0]).u();
	}
}

編譯時通過,運行時會拋出異常




注意!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



 
  © 2014-2022 ITdaan.com 联系我们: