java分享 一、论证重载是不是多态

    最近看了一些书上讲的多态,发现相互之间是有冲突的,最主要的冲突是对重载是不是多态的观点,看过这些书以后,我有了自己的看法,特此写出来给大家分享:

    一、首先我们看一下多态的定义:多态是指程序中定义的引用变量所指向的具体类型和通过该引用变量发出的方法或者属性调用在编程时不确定,而在运行期间才确定。

    从定义来看,需要注意几点:

        1)引用变量指向的具体类型在编程时不确定

        2)引用变量发出的方法或者属性调用在编程时不确定

        3)以上两点不确定,在运行期间能够确定

    从以上3点来看,跟重载没有任何关系。

    二、我们再看一下多态的特性:

        1)子类继承父类

        2)子类覆盖父类

        3)父类引用指向子类对象

    只有在完全满足这3个特性的时候,才能完全实现多态的定义,首先我们看子类继承父类,以下3张图片是3个不同的类,其中Aoo是Boo和Coo的父类:

        

        

        

    在以上图中,我们看到了Boo和Coo都继承了Aoo,不同的是Boo没有覆盖Aoo的className这个属性,但是Coo有覆盖,如果我们用Aoo的引用变量去分别指向Boo和Coo的对象,然后透过该引用变量去调用getClassName()方法,获取className的值,得到的结果是不一样的,这种形式叫做多态,如下图所示

        java分享 一、论证重载是不是多态_第1张图片

        从上图打印的结果中我们能看到,当子类覆盖父类的属性的时候,我们取出来的值是我们覆盖后的属性值,而如果我们不覆盖,我们取到的还是原来父类中的属性值,但是不管我们是否覆盖,我们在调用getClassName()这个方法的时候,所执行的都是子类中的方法,而不是父类的方法,这就是多态。重载是指方法名相同,参数不同的多个方法,这叫重载,重载首先和继承没有任何关系,更不涉及到覆盖父类的属性或者方法,也和父类动态的去引用子类对象没有任何关系,所以说,重载不是多态!

你可能感兴趣的:(java分享)