当前位置: 首页 > 图灵资讯 > 技术篇> Java 一个方法重写了三次 怎么引用其中一个

Java 一个方法重写了三次 怎么引用其中一个

来源:图灵教育
时间:2023-11-24 17:39:09

引用重写方法的方案问题描述

假设我们有一个基类 Animal,其中有一个 speak() 打印动物声音的方法。现在我们需要创建三个子类 DogCatHorse,它们分别重写 speak() 打印不同声音的方法。现在的问题是,我们想在某个地方引用一个子类 speak() 方法,而不是创建特定的子类对象。

方案解决

我们可以使用多态性和接口来解决这个问题。我们将创建一个接口 AnimalInterface,它包含抽象 speak() 方法。然后,我们的三个子类 DogCatHorse 实现此接口并重写 speak() 方法。

接下来,我们将创建一个工厂 AnimalFactory,其中一种方法 getAnimal(),根据输入的参数返回相应的子类对象。通过这种方式,我们可以调用它 AnimalFactory.getAnimal() 该方法获得了指定子类的例子。最后,我们可以通过接口引用来调用它 speak() 方法。

AnimalInterface 接口
public interface AnimalInterface {    void speak();}
Dog 类
public class Dog implements AnimalInterface {    @Override    public void speak() {        System.out.println("汪汪汪!");    }}
Cat 类
public class Cat implements AnimalInterface {    @Override    public void speak() {        System.out.println("喵喵喵!");    }}
Horse 类
public class Horse implements AnimalInterface {    @Override    public void speak() {        System.out.println("嘶嘶嘶!");    }}
AnimalFactory 工厂类
public class AnimalFactory {    public static AnimalInterface getAnimal(String animalType) {        if (animalType.equalsIgnoreCase("Dog")) {            return new Dog();        } else if (animalType.equalsIgnoreCase("Cat")) {            return new Cat();        } else if (animalType.equalsIgnoreCase("Horse")) {            return new Horse();        }        return null;    }}
测试代码
public class Main {    public static void main(String[] args) {        AnimalInterface animal = AnimalFactory.getAnimal("Dog");        animal.speak(); // Output: 汪汪汪!        animal = AnimalFactory.getAnimal("Cat");        animal.speak(); // Output: 喵喵喵!        animal = AnimalFactory.getAnimal("Horse");        animal.speak(); // Output: 嘶嘶嘶!        animal = AnimalFactory.getAnimal("Horse");        animal.speak(); // Output: 嘶嘶嘶!    }}

通过上述方案,我们可以根据输入的参数获得相应的子类对象,并通过接口引用进行调用 speak() 方法,实现了引用重写方法的需要。

流程图
flowchart TD;    start[开始]-->createInterface[创建接口 AnimalInterface]    createInterface-->createDog[创建类 Dog 实现 AnimalInterface]    createInterface-->createCat[创建类 Cat 实现 AnimalInterface]    createInterface-->createHorse[创建类 Horse 实现 AnimalInterface]    createDog-->createFactory[创建工厂类 AnimalFactory]    createCat-->createFactory    createHorse-->createFactory    createFactory-->testCode[编写测试代码 Main]    testCode-->end[结束]

以上是解决问题的详细解决方案。通过多态性和接口,我们可以在没有特定子类对象的情况下引用重写方法。这可以提高代码的重用性和灵活性。