【Java基础】20.多态(面向对象的三大特征:封装、继承、多态)

本文详细介绍了多态的概念,包括其定义、优点(如代码灵活性和可扩展性)、存在的必要条件以及在Java中的实现(重写、接口和抽象类)。通过实例演示了多态如何在实际编程中应用。
摘要由CSDN通过智能技术生成


一、多态的概念

1.多态介绍

多态是同一个行为具有多个不同表现形式或形态的能力。
多态就是同一个接口,使用不同的实例而执行不同操作,如图所示:
多态介绍
多态性是对象多种表现形式的体现。

2.多态优点

  • 消除类型之间的耦合关系
  • 可替换性
  • 可扩充性
  • 接口性
  • 灵活性
  • 简化性

3.多态存在的三个必要条件

  • 继承
  • 重写
  • 父类引用指向子类对象:Parent p = new Child();

多态的必要条件

class Shape {
    void draw() {}
}
  
class Circle extends Shape {
    void draw() {
        System.out.println("Circle.draw()");
    }
}
  
class Square extends Shape {
    void draw() {
        System.out.println("Square.draw()");
    }
}
  
class Triangle extends Shape {
    void draw() {
        System.out.println("Triangle.draw()");
    }
}

当使用多态方式调用方法时,首先检查父类中是否有该方法,如果没有,则编译错误;如果有,再去调用子类的同名方法。

多态的好处:可以使程序有良好的扩展,并可以对所有类的对象进行通用处理。

4.实例

父类 Animal:

public class Animal {
    public String name = "动物名称";

    public void run() {
        System.out.println("动物可以跑~~");
    }

}

子类 Dog:

public class Dog extends Animal {
    public String name = "狗名称";

    @Override
    public void run() {
        System.out.println("狗跑的非常快~~~~");
    }

    public void eat(){
        System.out.println("狗吃狗粮----");
    }

}

子类 Tortoise :

public class Tortoise extends Animal {
    public String name = "乌龟名称";

    @Override
    public void run() {
        System.out.println("乌龟跑的非常慢~~~~");
    }

    public void eat(){
        System.out.println("乌龟吃龟粮----");
    }

}

测试类:

/**
 * @ClassName: Test
 * @Description: 多态(面向对象的三大特征:封装、继承、多态)
 * 多态:去完成某个行为,当不同的对象去完成时会产生出不同的状态。
 * 父类 对象名称 = new 子类构造器();
 * 接口 对象名称 = new 实现类构造器();
 * @author: Zh
 * @date: 2024/4/20 13:37
 */
public class Test {
    public static void main(String[] args) {
        show(new Dog()); // 以 Dog 对象调用 show 方法
        show(new Tortoise()); // 以 Tortoise 对象调用 show 方法

        System.out.println("----格式:父类 对象名称 = new 子类构造器();----");
        Animal a = new Dog();
        a.run(); // 方法调用:编译看左,运行看右
        System.out.println(a.name); // 属性调用:编译看左,运行也看左,动物名称

        Animal a1 = new Tortoise();
        a1.run();
        System.out.println(a1.name); // 动物名称
    }

    public static void show(Animal a)  {
        a.run();
        // 类型判断
        if (a instanceof Tortoise)  {  // 乌龟做的事情
            Tortoise c = (Tortoise)a;
            c.eat();
        } else if (a instanceof Dog) { // 狗做的事情
            Dog c = (Dog)a;
            c.eat();
        }
    }

}

编译运行结果如下:

狗跑的非常快~~~~
狗吃狗粮----
乌龟跑的非常慢~~~~
乌龟吃龟粮----
----格式:父类 对象名称 = new 子类构造器();----
狗跑的非常快~~~~
动物名称
乌龟跑的非常慢~~~~
动物名称

二、多态的实现方式

1.方法1:重写(Override)

2.方法2:接口

  1. 生活中的接口最具代表性的就是插座,例如一个三接头的插头都能接在三孔插座中,因为这个是每个国家都有各自规定的接口规则,有可能到国外就不行,那是因为国外自己定义的接口类型。
  2. java中的接口类似于生活中的接口,就是一些方法特征的集合,但没有方法的实现。

3.抽象类和抽象方法

  • 5
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值