다른 동물 유형이 동물 인터페이스와 동일한 talk() 메소드를 구현하는 문제에 대해 작업하고 있습니다.
getAnimal()
방법을 보면, 새로운 종류의 동물이 프로그램에 추가되면 그 방법의 내부도 변경되어야한다는 것을 알 수 있습니다.
나는 이미 존재하는 클래스에서 아무것도 바꾸지 않고 Animal을 서브 클래스 화함으로써 새로운 동물을 추가하고 싶다.
예를 들어 "Dog"라는 동물을 추가하면 criteria = "loyal"이됩니다. talk = "woof".
가능한지 말해 줄 수 있습니까?자바에서 동적 클래스 만들기
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");
}
}
}
내가, 구글에 검색이 반사하여 수행 할 수 있습니다 이해 : 다음은 내 코드입니다. 그러나 어떻게해야할지 모르겠다. 가능하다면, 이걸로 나를 도울 수 있겠 니? 미리 감사드립니다!
아마도 '익명의 내부 클래스'를 찾고있을 것입니다. –
여러분의 문제는 반영이 필요하지 않지만 Java에서는 표준 OOP로만 생각됩니다. –
'if (criteria.equals ("Scary")) { return new Wombat(); }' –