目录

大橙子

VX:ZzzChChen
Phone:13403656751
Email:zxydczzs@gmail.com

X

Java 多态

首先来看什么是多态

多态是同一个行为具有多个不同表现形式或形态的能力。
多态就是同一个接口,使用不同的实例而执行不同操作。

多态性是对象多种表现形式的体现。

多态的优点

  1. 消除类型之间的耦合关系;
  2. 可替换性;
  3. 可扩充性;
  4. 接口性;
  5. 灵活性;
  6. 简化性;

多态存在的三个必要条件

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

package com.zxy.demo.Test;

public class DuoTai {
    public static void main(String[] args) {
        Shape s1 = new Circle();
        Shape s2 = new Square();
        Shape s3 = new Triangle();

        s1.draw();
        s2.draw();
        s3.draw();
    }
}

class Shape{
    void draw(){}
}

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

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

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

当使用多态方式调用方法时,首先检查父类中是否有该方法,如果没有,则编译错误;如果有,再去调用子类的同名方法。
多态的好处:可以使程序有良好的扩展,并可以对所有类的对象进行通用处理。
package com.zxy.demo.Test;

public class DuoTai1 {
    public static void main(String[] args) {
        show(new Cat());
        show(new Dog());

        Animal a = new Cat();
        a.eat();
        Cat c = (Cat) a;
        c.work();
    }
    public static void show(Animal a){
        a.eat();
        if(a instanceof Cat){
            Cat c = (Cat) a;
            c.work();
        } else if(a instanceof Dog){
            Dog c = (Dog) a;
            c.work();
        }
    }
}

abstract class Animal {
    abstract public void eat();
}

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

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

class Dog extends Animal {

    @Override
    public void eat() {
        System.out.println("吃骨头");
    }
    public void work(){
        System.out.println("看家");
    }
}

多态的实现方式

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

为什么要使用多态

  1. 可替换性: 多态对已存在代码具有可替换性。例如,多态对水果类工作,对苹果,橙子也同样工作。
  2. 可扩充性: 多态对代码具有可扩充性,可扩充功能。新加子类更容易获得多态功能。例如,在实现苹果的多态基础上,很容易增添水果类的多态性。
  3. 接口性: 多态是超类通过方法签名,向子类提供了一个共同接口 ,由子类来完善或者覆盖它而实现的。
  4. 灵活性: 它在应用中有着灵活的操作,提高了工作效率
  5. 简化性: 多态简化代码编写 和修改过程,尤其在处理大量对象的运算和操作时,这个特点尤为突出和重要。
(摘自菜鸟教程以及百度百科。)

标题:Java 多态
作者:zzzzchen
地址:https://www.dczzs.com/articles/2021/10/29/1635508115286.html