【发布时间】:2018-01-25 10:35:57
【问题描述】:
我有 2 个几乎相同的类,理想情况下它们应该共享同一个父类,但不(因为它们来自不同的库,我无法更改其源代码)。
为了举例说明,我有两个类:
public class Cat {
public void speak() {
System.out.println("Meow");
}
public CatFood findFood() {
return new CatFood();
}
public void eat(CatFood food) {
System.out.println("[Cat] Yum yum");
}
}
public class Dog {
public void speak() {
System.out.println("Woof");
}
public DogFood findFood() {
return new DogFood();
}
public void eat(DogFood food) {
System.out.println("[Dog] Yum yum");
}
}
现在理想情况下我想做这样的事情:
Animal[] animals = {new Cat(), new Dog()};
for (Animal animal : animals) {
animal.speak();
animal.eat(animal.findFood());
}
但 Cat 和 Dog 不继承自 Animal,我无法更改它们的源代码。我还想避免依赖instanceof 作为拐杖:
for (Object animal : animals) {
if (animal instanceof Dog) {
Dog dog = (Dog) animal;
dog.speak();
dog.eat(dog.findFood());
} else if (animal instanceof Cat) {
Cat cat = (Cat) animal;
cat.speak();
cat.eat(cat.findFood());
} else if (animal instanceof Rabbit) { // etc etc
}
代码只是被重复了无数次,所以如果我对逻辑做一点小改动,我也必须复制和粘贴无数次。
那么我怎样才能以最少的代码重复来使用这些类呢?
【问题讨论】:
-
实现这一点的另一种方法是:Mycat extends Cat implements Animal ,MyDog extends dog implements Animal ,Animal 接口应该有这三种方法
-
也许你对适配器模式感兴趣。创建您自己的接口和两个实现它并包装 Cat 和 Dog 的类。
标签: java class oop code-duplication