Java中什么是多态?

本文详细介绍了面向对象编程中的三大特征,重点阐述了多态的定义、作用、实现方式(接口、继承和重写),以及多态在Java中的应用实例。通过实例展示,讲解了多态带来的可替换性、可扩充性等优势和代码灵活性简化性。
摘要由CSDN通过智能技术生成

1、面向对象的三大特征

封装、继承、多态。

2、多态的定义

指允许不同类的对象对同一消息做出响应。即同一消息可以根据发送对象的不同而采用多种不同的行为方式。(发送消息就是函数调用)

3、多态的作用

消除类型之间的耦合关系

4、多态存在的三个必要条件

1)要有继承

2)要有重写

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

Java中多态的实现方式:接口实现,继承父类进行方法重写,同一个类中进行方法重载。

4)多态的好处

可替换性(substitutability)。多态对已存在代码具有可替换性。例如,多态对圆Circle类工作,对其他任何圆形几何体,如圆环,也同样工作。

可扩充性(extensibility)。多态对代码具有可扩充性。增加新的子类不影响已存在类的多态性、继承性、以及其他特性的运行和操作。实际上新加子类更容易获得多态功能。例如,在实现了圆锥、半圆锥以及半球体的多态基础上,很容易增添球体类的多态性。

接口性(interface-ability)。多态是超类通过方法签名,向子类提供了一个共同接口,由子类来完善或者覆盖它而实现的。如图8.3所示。图中超类Shape规定了两个实现多态的接口方法,computeArea()以及computeVolume()。子类如Circle和Sphere为了实现多态,完善或者覆盖着两个接口方法。

灵活性(flexibility)。它在应用中体现了灵活多样的操作,提高了使用效率。

简化性(simplicity)。多态简化对应用软件的代码编写和修改过程,尤其在处理大量对象的运算和操作时,这个特点尤为突出和重要。

代码实战:

举例:

对象的多态性: 动物  x = new 猫();

函数的多态性: 函数重载、重写

(1)多态的体现

        父类的引用指向了自己的子类对象

        父类的引用也可以接收自己的对象

(2)多态的前提

        必须是类与类之间只有关系,要么继承或实现

        通常还有一个前提,存在覆盖

(3)多态的好处

        多态的出现大大提高了程序的扩展性

(4)多态的弊端

        只能使用父类的引用访问父类的成员

父类:

package com.kangning.web.controller.test.bochy;

public abstract class Animal {

    abstract void eat();
}

Cat:

package com.kangning.web.controller.test.bochy;

public class Cat extends Animal{
    public void eat(){
        System.out.println("吃鱼");
    }

    public void catchMouse(){
        System.out.println("抓老鼠");
    }
}

Dog:

package com.kangning.web.controller.test.bochy;

public class Dog extends Animal{
    @Override
    void eat() {
        System.out.println("吃骨头");
    }

    public void kanJia(){
        System.out.println("看家");
    }
}
package com.kangning.web.controller.test.bochy;

public class DuoTaiDemo {
    public static void main(String[] args) {
        function(new Cat());
        function(new Dog());
        Animal a = new Cat();
        a.eat();

        Cat c = (Cat) a;//向下转型
        c.catchMouse();
    }

    public static void function(Animal a) {
        a.eat();
        /**
         * 用于子类型或判断所属类型进而使用其特有方法
         */

        if (a instanceof Cat) {
            Cat c = (Cat) a;
            c.catchMouse();
        } else if (a instanceof Dog) {
            Dog c = (Dog) a;
            c.kanJia();
        }
    }
}

运行结果如下:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值