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 A
		System.out.println(a1.clarify(c)); // A and A
		System.out.println(a1.clarify(d)); // A and D
		System.out.println(a2.clarify(b)); // B and A
		System.out.println(a2.clarify(c)); // B and A
		System.out.println(a2.clarify(d)); // A and D
		System.out.println(b.clarify(b)); // B and B
		System.out.println(b.clarify(c)); // B and B
		System.out.println(b.clarify(d)); // A and D
	}
}



2.A.java
package cn.com;

class A
{
	public String clarify(D obj)
	{
		return ("A and D");
	}

	public String clarify(A obj)
	{
		return("A and A");
	}

}



3.B.java
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");
	}
}

4.C.java
package cn.com;

class C extends B
{
}


5.D.java
package cn.com;

class D extends B
{

}

你可能感兴趣的:(java,C++,c,C#)