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>