OO多态性的一个体现

来源:互联网 发布:流星网络电视tv版apk 编辑:程序博客网 时间:2024/05/01 19:42
请看代码
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>


0 0
原创粉丝点击