На сколько корректно примерное описание классов?
public static void main(String[] args){
Animal cat = new Cat(3,"Брсик");
Animal dog = new Dog(5,"Вульф");
List<Animal> myAnimal = Arrays.asList(cat, dog);
for (Animal animal : myAnimal) {
cat.eat();
dog.eat();
}
}
public interface Animal {
int getAGe();
String getName();
void walk();
void eat();
void sleep();
}
public abstract class Canidae implements Animal {
private final int age;
private final String name;
public Canidae(int age, String name) {
this.age = age;
this.name = name;
}
public int getAGe() {
return age;
}
public String getName() {
return name;
}
}
public abstract class Felidae implements Animal {
private final int age;
private final String name;
public Felidae(int age, String name) {
this.age = age;
this.name = name;
}
public int getAGe() {
return age;
}
public String getName() {
return name;
}
}
public class Dog extends Canidae {
public Dog(int age, String name) {
super(age, name);
}
public void walk() {
}
@Override
public void eat() {
System.out.println("Хрум");
}
public void sleep() {
}
}
public class Cat extends Felidae {
public Cat(int age, String name) {
super(age, name);
}
public void walk() {
}
public void eat() {
System.out.println("Ням");
}
public void sleep() {
}
}
ИМХО структура явно перегружена. Что изменится если интерфейс Animal сделать абстрактным классом и общим предком Canidae и Felidae? Ответ ничего. Стало быть интерфейс Animal излишен.
Вообще интерфейс описывает не сущность класса, а поведение класса, уже с этой точки зрения интерфейс Animal не выдерживает критики.
Лучше бы сделать интерфейс:
public interface Climbable { //лазающий
public void climb();
}
Тогда кошачий класс будет иметь специальное поведение:
public abstract class Felidae extends Animal implements Climbable {
}
По своему скромному мнению хочу отметить несколько проблем, которые я заметил:
private, то в названии
стоит добавить _ (underscore) (может еще стоит начать использовать свойства)Animals описаны некоторые методы (eat(),
walk(), sleep()). Все вроде бы неплохо, но если к примеру у
собаки бессоница ? Или же она к примеру не может ходить. Или из-за
своей бессоницы у нее пропал аппетит ? Что тогда ? Если Ваши классы с
домашними животными реализовывают этот интерфейс, то по сути, класс который реализует интерфейс, должен описывать все методы, объявленные в интерфейсе.На Вашем месте, я бы почитал про очень интересный патерн проектирования под названием: стратегия.
Удачи !
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости