OO多態性的一個體現

請看代碼
class AA{
<span style="white-space:pre">	</span>String toString(){
<span style="white-space:pre">		</span>return "This is AA";
<span style="white-space:pre">	</span>}
}


class BB extends AA{
<span style="white-space:pre">	</span>String toString(){
<span style="white-space:pre">		</span>return "This is BB";
<span style="white-space:pre">	</span>}
}


class CC extends AA{
<span style="white-space:pre">	</span>String toString(){
<span style="white-space:pre">		</span>return "This is CC";
<span style="white-space:pre">	</span>}
}

public class Test{
	public static void main(String[] args){
		BB b = new BB();
		AA c = new CC();
		AA a = (BB)b;

		List<AA> as = new ArrayList<AA>();
		as.Add(a);
		as.Add(c);

		for(AA temp : as){
			System.out.println(temp.toString());
		}
	}
}

輸出結果是:

This is BB
This is CC
說明了什麼呢?

c對象是父類實例化子類對象所得,a是b強轉過來的,其實沒什麼作用,正確的所用體現應該是:


class AA{
	String toString(){
		return "This is AA";
	}
}

class BB extends AA{
	String toString(){
		return "This is BB";
	}
	String SelfMethod(){
		return "I am BB";
	}
}

class CC extends AA{
	String toString(){
		return "This is CC";
	}
}

public class Test{
	public static void main(String[] args){
		AA b = new BB();
		AA c = new CC();

		List<AA> as = new ArrayList<AA>();
		as.Add(a);
		as.Add(c);

		for(AA temp : as){
			if(temp instanceof BB){
				System.out.println(temp.SelfMethod());
			}
			System.out.println(temp.toString());
		}
	}
}

<p>//沒看懂?自己code一下吧。</p><p></p>


發佈了22 篇原創文章 · 獲贊 6 · 訪問量 3萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章