У меня есть абстрактный класс Pet
с абстрактным методом feed(...)
. Метод должен принимать только некоторые из трех видов пищи (DRY, WET или RAW). Это может быть тип String, поскольку я использую их только как индикаторы в SWITCH в последующих логах c. Также у меня есть два подкласса Cat
и Dog
. Они реализуют метод feed(...)
от Pet. Наиболее близким, к которому я пришел, является использование ENUM: Pet. java:
public abstract class Pet {
public enum FoodType {
DRY,
WET,
RAW;
}
public abstract void feed(FoodType foodType);
}
Cat. java:
public class Cat extends Pet {
public void feed(FoodType foodType) {
switch (foodType) {
case DRY:
System.out.println("Feeding this cat dry food.");
break;
case RAW:
System.out.println("Feeding this cat raw food.");
break;
case WET:
System.out.println("Feeding this cat wet food.");
break;
}
}
}
Dog. java:
public class Dog extends Pet {
public void feed(FoodType foodType) {
// implementation similar to feed() in Cat.
}
}
Приложение. java:
import pets.Dog;
import pets.Pet;
public class App {
public static void main(String[] args) {
Dog dog01 = new Dog();
dog01.feed(Pet.FoodType.DRY);
}
}
Но мне это не нравится, поскольку ENUMS уста- новлены c, по умолчанию к FoodType
можно получить доступ из любого места проекта. Не создавая Cat
или Dog
объект, я могу вызвать Pet.FoodType.DRY
из любого места. Предпочтительно он должен быть связан только с объектом, который наследуется от Pet, например:
Dog dog01 = new Dog();
dog01.FoodType.DRY; // do smth with this