Делаю потиху задания из решебника и это на третьем пункте меня выбило немного из колеи.
Создать объект класса Котёнок, используя классы Животное, Кошка. Методы:
вывести на консоль имя,
подать голос,
public class Main {
public static void main(String[] args) {
Cat cat = new Cat();
Kitten kitten = cat.giveBirth();
System.out.println(kitten);
cat.printName();
}
}
interface Mother {
<T extends Animal> Kitten giveBirth();
}
abstract class Animal {
protected String name;
abstract void say();
public void printName() {
System.out.printf("My name is %s\n", name);
}
}
class Cat extends Animal implements Mother {
public Cat() {
name = "Cat";
}
@Override
public <T extends Animal> Kitten giveBirth() {
return new Kitten();
}
@Override
public void say() {
System.out.printf("Meow\n");
}
}
class Kitten extends Animal {
public Kitten() {
name = "Kitten";
}
@Override
public void say() {
System.out.printf("Meow\n");
}
}
Как сделать так, чтобы это работало с вывода в main, то есть как-то так:
public class Main {
public static void main(String[] args) {
Cat cat = new Cat("nameCat");
cat.say();
System.out.printf(cat.giveBirth());
Cat catTwo = new Cat("nameCatTwo");
catTwo.say();
System.out.printf(catTwo.giveBirth());
}
}
И правильно ли я понял третий пункт? Что он должен выводить? Почти 6 утра, не понимаю уже ничего. И как корректно переопределить для каждого класса методы equals(), hashCode(), toString()?
У вас класс Kitten, как минимум, неправильно реализован. Вообще, он в целом и не нужен, так как котёнок - это таже кошка, только маленькая.
Но если уж хотите отдельный класс под котёнка, то наследовать его надо от Cat, а не Animal.
Реализация кошки тоже странная: class Cat extends Animal implements Mother. Кот не мать, он не может рожать. Или же тут имелась ввиду кошка именно как самка?
Плюс, вы реализуете этот интерфейс у кошки, а не у базового класса Animal. В таком случае, к примеру, если вы захотите создать класс для собаки Dog, то там тоже будете этот интерфейс реализовывать? По-хорошему, такие вещи нужно как можно выше в иерархии классов реализовывать.
Как развивать веб-проекты в 2026 году: технологии, контент E-E-A-T и факторы доверия
Современные инструменты для криптотрейдинга: как технологии помогают принимать решения
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники