Не понимаю, зачем вам имена подклассов. Если проблема заключается в создании экземпляра класса на основе его имени, было бы лучше использовать шаблон Abstract Factory. Вы можете создать перечисление, которое содержит знакомое вам животное
enum ANIMALS {
DOG, CAT
}
Вы можете создать интерфейс Animal
public interface Animal {
}
классы, расширяющие Animal как классы по умолчанию
public class Dog implements Animal {
}
затем, наконец, AnimalAbstractFactory как
public class AnimalAbstractFactory {
public enum ANIMALS {
DOG, CAT
}
public Animal createAnimal(ANIMALS animal) {
switch (animal) {
case DOG:
return new Dog();
case CAT:
return new Cat();
}
return null;
}
}
. Отмечает, что теперь вам не нужно знать подкласс для создания экземпляра животного. Также обратите внимание, что createAnimal возвращает Animal , а не подкласс. Надеюсь, это поможет.