Java多态性的一个例子
直接上代码吧:
1.test.java
package cn.com;public class test{public static void main(String[] args){A a1 = new A();A a2 = new B();B b = new B();C c = new C();D d = new D();// 优先级由高到低依次为:// the.clarify(O)、super.clarify(O)、the.clarify((super)O)、super.clarify((super)O)//// a2.clarify(b),a2是一个引用变量,类别为A,则the为a2,// b是B的一个的举例,于是它到类A里面找clarify(B obj),没有找到,// 于是到A的super(超类)找,而A没有超类,因此转到第三优先级the.clarify((super)O),// the仍然是a2,那里O为B,(super)O即(super)B即A,因此它到类A里面找clarify(A obj),// 类A有那个窍门,但是由于a2引用的是类B的一个的对象,B覆盖了A的clarify(A// obj)窍门,因此最终锁定到类B的clarify(A obj),输出为"B and A”System.out.println(a1.clarify(b)); // A and ASystem.out.println(a1.clarify(c)); // A and ASystem.out.println(a1.clarify(d)); // A and DSystem.out.println(a2.clarify(b)); // B and ASystem.out.println(a2.clarify(c)); // B and ASystem.out.println(a2.clarify(d)); // A and DSystem.out.println(b.clarify(b)); // B and BSystem.out.println(b.clarify(c)); // B and BSystem.out.println(b.clarify(d)); // A and D}}package cn.com;class A{public String clarify(D obj){return ("A and D");}public String clarify(A obj){return("A and A");}}package cn.com;class B extends A{public String clarify(B obj){return ("B and B");}public String clarify(A obj){return ("B and A");}}package cn.com;class C extends B{}package cn.com;class D extends B{} 1 楼 mqlfly2008 2010-07-13 看完了这个,自己试验了下才明白在说什么!