工厂模式与继承

use*_*690 1 java oop design-patterns

使用继承时,我遇到了Factory模式的问题,

这是我的代码

public class Animal {
  public int numberOfLegs() { return 2 ;}
}

public class Cat extends Animal {
  public String getSound() {return "Maaaw";}
}
public class Dog extends Animal {
  public String getSound() {return "woof";}
}

public class AnimalFactory {
  public Animal getAnimal(String name){
    Animal an= null ;
    if(name=="cat"){an = new Cat();}
    else if(name=="dog"){an=new Dog();}
    return an ;
  }
}

public class FactoryDemo {

  public static void main(String[] args) {
    AnimalFactory anmF=new AnimalFactory();
    Animal anm=anmF.getAnimal("cat") ;
    System.out.println("legs : "+anm.numberOfLegs()); // working fine
    System.out.println("sound : "+anm.getSound());    // giving error
  }
}
Run Code Online (Sandbox Code Playgroud)

当我运行它时,我无法使用该getSound()方法.它给出了一个错误.

如果我将Animal类定义为Abstract类,这将正常工作,
但我想如何处理Factory模式这样的情况.

Mic*_*ker 8

您需要为getSound添加抽象方法

public abstract class Animal {
    public int numberOfLegs() { return 2 ;}
    public abstract String getSound();
}
Run Code Online (Sandbox Code Playgroud)