引用重写方法的方案问题描述
假设我们有一个基类 Animal
,其中有一个 speak()
打印动物声音的方法。现在我们需要创建三个子类 Dog
、Cat
和 Horse
,它们分别重写 speak()
打印不同声音的方法。现在的问题是,我们想在某个地方引用一个子类 speak()
方法,而不是创建特定的子类对象。
我们可以使用多态性和接口来解决这个问题。我们将创建一个接口 AnimalInterface
,它包含抽象 speak()
方法。然后,我们的三个子类 Dog
、Cat
和 Horse
实现此接口并重写 speak()
方法。
接下来,我们将创建一个工厂 AnimalFactory
,其中一种方法 getAnimal()
,根据输入的参数返回相应的子类对象。通过这种方式,我们可以调用它 AnimalFactory.getAnimal()
该方法获得了指定子类的例子。最后,我们可以通过接口引用来调用它 speak()
方法。
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[结束]
以上是解决问题的详细解决方案。通过多态性和接口,我们可以在没有特定子类对象的情况下引用重写方法。这可以提高代码的重用性和灵活性。