java多态性例子_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

{

}

分享到:

18e900b8666ce6f233d25ec02f95ee59.png

72dd548719f0ace4d5f9bca64e1d7715.png

2010-07-04 17:41

浏览 2816

分类:非技术

评论

1 楼

mqlfly2008

2010-07-13

看完了这个,自己试验了下才明白在说什么!

感觉如果用文字表达可能会更加的清晰

在此添加上自己的理解!

在泛型中!首先会寻找对象被定义时被定义的索引A a = new B() ;

a 就被被定义为 类A的一个对象

所以在寻找方法的时候会先去找参数的最小泛型(可能会是子类类型本身),如果 A 类中

没有找到该方法,就会去A 的父类中寻找!这个是泛型的向上;如果父类中也没有,就会尝

试向上泛型参数!如果在A中有适应的方法,则会去看看a对象的真实引用B中是否覆盖了A

中的这个方法,如果覆盖了,则会调用子类B中覆盖父类的方法

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值