Ich arbeite an einem Problem, wo verschiedene Tierarten die gleiche talk() -Methode von Animal-Schnittstelle implementieren.
Wenn Sie getAnimal()
Methode betrachten, können Sie sehen, dass, wenn eine neue Art von Tier zum Programm hinzugefügt wird, innerhalb dieser Methode auch geändert werden muss.
Ich möchte neue Tiere nur hinzufügen, indem ich Tier unterklassiere, ohne etwas in den bereits vorhandenen Klassen zu ändern.
Fügen Sie beispielsweise ein Tier "Hund" hinzu, criteria = "loyal"; talk = "Woof".
Können Sie mir sagen, wie es möglich ist? Unten ist mein Code:Erstellen Sie eine dynamische Klasse in Java
interface Animal {
public void talk();
}
class Lion implements Animal {
@Override
public void talk() {
System.out.println("ROARRRRR");
}
}
class Mouse implements Animal {
@Override
public void talk() {
System.out.println("SQUEEEEEAK");
}
}
class Bison implements Animal {
@Override
public void talk() {
System.out.println("BELLOWWWWW");
}
}
class AnimalType {
public static Animal getAnimal(String criteria) {
// I refactor this method
if (criteria.equals("small")) {
return new Mouse();
} else if (criteria.equals("big")) {
return new Bison();
} else if (criteria.equals("lazy")) {
return new Lion();
}
return null;
}
}
public class AnimalExamples {
public static void main(String[] args) {
AnimalType.getAnimal("small").talk();
AnimalType.getAnimal("big").talk();
AnimalType.getAnimal("lazy").talk();
// how to add an animal "Dog" here, criteria="loyal"; talk="woof"
AnimalType.getAnimal("loyal").talk();
try {
AnimalType.getAnimal("small").talk();
} catch (Exception ex) {
System.out.println("Animal does not exists");
}
}
}
Ich suchte auf Google, verstand es kann durch Reflexion getan werden. Aber ich weiß nicht wie. Wenn möglich, könntest du mir bitte dabei helfen? Danke im Voraus!
Sie suchen wahrscheinlich eine 'anonyme innere Klasse' –
Ich glaube nicht, dass Ihr Problem Reflexion erfordert, sondern nur Standard-OOP in Java. –
'if (criteriae.equals (" Scary ")) { return new Wombat(); } ' –