Java基础知识之多态性

    xiaoxiao2021-03-25  60

    概念:Java的多态性是指不同的类的实体可以对同一消息产生不同的回应,即同一消息会由于调用的对象不同而产生不同的行为方式。

    实现多态的技术称为:动态绑定(dynamic binding),是指在执行期间判断所引用对象的实际类型,根据其实际的类型调用其相应的方法。

    实现多态的三个必要条件:继承、重写、向上转型。

    下面来看一个例子:

    class A { public String show(D obj){ 方法一 return ("A and D"); } public String show(A obj){ 方法二 return ("A and A"); } } class B extends A{ public String show(B obj){ 方法三 return ("B and B"); } public String show(A obj){ 方法四 return ("B and A"); } } class C extends B{} class D extends B{} 问以下的输出结果是什么

    A a1 = new A(); A a2 = new B(); B b = new B(); C c = new C(); D d = new D(); System.out.println(a1.show(b)); ① System.out.println(a1.show(c)); ② System.out.println(a1.show(d)); ③ System.out.println(a2.show(b)); ④ System.out.println(a2.show(c)); ⑤ System.out.println(a2.show(d)); ⑥ System.out.println(b.show(b)); ⑦ System.out.println(b.show(c)); ⑧ System.out.println(b.show(d)); ⑨

    答案:

    ① A and A ② A and A ③ A and D ④ B and A ⑤ B and A ⑥ A and D ⑦ B and B ⑧ B and B ⑨ A and D想完全做对这道题目确实需要对多态理解的特别深刻,下面我进行讲解:

    1、2、3中,是调用a1中的方法,a1为A类对象实例也是A,那么在a1中的可用的方法为一、二这俩个,参数分别为b、c、d由于b、c分别继承为A可将其视作A类型,故很简单输出分别为 A and A、A and A、A and D。

    4、5、6中,a2对象是一个A类型的上转型对象,a2可用的方法为方法一、方法四,很多人会问为什么是方法四而不是方法二呢,这里就是多态性的体现,a2是A类型的所以a2只能使用A类的方法方法一,方法二,但同时a2给的是B类的实体,在B类中重载了方法二,故方法二被方法四覆盖了!这样看来就很容易判断最后的结果了,7 8 9 的输出亦是同样的道理。

    转载请注明原文地址: https://ju.6miu.com/read-40993.html

    最新回复(0)