Java基础知识之多态性

来源:互联网 发布:python 编码转换 编辑:程序博客网 时间:2024/06/07 20:46


概念: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 的输出亦是同样的道理。


0 0