向上轉型筆試題

筆試時遇到這樣一道題:



public class A {

	public String run(D obj)
	{
		return ("A_D");
	}
	
	public String run(A obj)
	{
		return("A_A");
	}
	static class B extends A
	{
		public String run(B obj)
		{
			return ("B_B");
		}
		public String run(A obj)
		{
			return ("B_A");
		}
	}
	static class C extends B
	{
		
	}
	static class D extends B
	{
		
	}
	
	public static void main(String[] args) {
		A ab = new B();
		System.out.println(ab.run(new B()));
		System.out.println(ab.run(new C()));
		System.out.println(ab.run(new D()));
	}
}
/*
運行結果:
B_A
B_A
A_D
*/

當時腦子一片懵,不知從哪入手,忽略了向上轉型的細節:
向上轉型,在運行時,會丟棄子類對象中與父類對象中沒有的方法。也會覆蓋與父類中相同的方法–重寫。
做題時把關注點都放在了B、C、D繼承的問題上,而忽略了向上轉型後不能調用子類所特有的方法的特點。
即: B 中 run(B obj) 方法被丟棄。結果不會出現 B_B

#參考
https://blog.csdn.net/u014388299/article/details/52764817

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