可接受的实例使用
我是Java的新手,正在努力解决设计问题。我知道使用可能表示设计缺陷,我理解经常给出的类作为示例,替换和与等。instanceof
Animal/Dog/Cat
bark()
meow()
makenoise()
我的问题是,如果我需要根据子类的类型调用没有相应方法的方法,那么什么是明智的设计?例如,如果我想在类是 a 时调用新方法,但如果它是一个 ,则不执行任何操作,该怎么办?biteleash()
Dog
Cat
我确实考虑过让其中什么都不做,并在 中覆盖它,但是有很多像这样的方法,所以这似乎是一个笨拙的解决方案。类似地,如果调用方需要根据它持有的子类做一些不同的事情,该怎么办?如果子类是 ?这里是可以接受的,还是有更好的方法?biteleash()
Animal
Dog
Cat
instanceof
public class Animal {
String name;
public Animal(String name) {
this.name = name;
}
public String getName() {
return name;
}
public void makeNoise() {
System.out.println("Some noise for a generic animal!");
}
}
public class Cat extends Animal {
public Cat(String name) {
super(name);
}
@Override
public void makeNoise() {
System.out.println("Meow");
}
}
public class Dog extends Animal {
public Dog(String name) {
super(name);
}
@Override
public void makeNoise() {
System.out.println("Woof");
}
public void biteLeash() {
System.out.println("Leash snapped!");
}
}
import java.util.Random;
public class CodeExample {
public static void main(String[] args) {
Animal animal = getSomeAnimal();
System.out.println("My pet is called " + animal.getName());
animal.makeNoise();
if (animal instanceof Dog) {
Dog dog = (Dog) animal;
dog.biteLeash();
// do lots of other things because animal is a dog
// eg. sign up for puppy training lessons
}
}
private static Animal getSomeAnimal() {
Animal animal;
Random randomGenerator = new Random();
int randomInt = randomGenerator.nextInt(100);
if (randomInt < 50) {
animal = new Dog("Rover");
}
else {
animal = new Cat("Tiddles");
}
return animal;
}
}