Мой пример и его ошибки

336
04 августа 2021, 19:00

Класс Cat

public class Cat {
    String name;
    public Cat(String name) {
        this.name = name;
    }
    public void run() {
        System.out.println("Бег");
    }
}

Класс Tiger

public class Tiger extends Cat {
    String name;
    public Tiger(String name) {
        this.name = name;
    }
    @Override
    public void run() {
        System.out.println("Тигр бежит");
    }
}

Класс Lion

public class Lion extends Cat {
    String name;
    public Lion(String name) {
        this.name = name;
    }
    @Override
    public void run() {
        System.out.println("Лев бежит");
    }
}

Класс Cheetah

public class Cheetah extends Cat{
    String name;
    public Cheetah(String name) {
        this.name = name;
    }

    @Override
    public void run() {
        System.out.println("Гепард бежит");
    }
}

Класс Test

 public class Test {
        public static void main(String[] args) {
            Lion l1 = new Lion("Лев Вася");
            Tiger t1 = new Tiger("Тигр Тимоша");
            Cheetah c1 = new Cheetah("Гепард Филя");
            Doctor d1 = new Doctor();
            d1.healCat(l1);
            d1.healCat(t1);
        }
    }

Класс Doctor

public class Doctor {
    public void healCat(Cat cat) {
        System.out.println("Пациент" + cat.name + "здоров");
        cat.run();
    }
}

Пришла такая идея сделать в классе Doctor в методе healCat команду System.out.println("Пациент" + cat.name + "здоров");
Чтобы выводило для каждого объекта свой name. Но после создания для всех классов наследников конструктора начались проблемы с кодом. В каждом наследнике подчеркивается красной линией и пишет: There is no default constructor available in Cat. Как сделать так чтобы все имена выводились в методе healCat.

Answer 1

Ваш класс Cat является родительским классом для всех остальных классов, описывающих животных. Все дело в конструкторе, который вы создали в классе Cat. Дело в том, что компилятор автоматически добавляет конструктор без параметров в любой класс , но только до тех пор, пока вы не добавите конструктор с параметрами, что и произошло в классе Cat. Теперь все ваши классы, которые наследуются от клааса Cat, должны в своем конструкторе вызвать конструктор родителя, поскольку он теперь один. Вы должны помнить, что у класса родителя и дочерних классов отношение is a, т.е. дочерний класс всегда является своим супер классом. В вашем случае в супер классе есть конструктор, а конструктор служит для создания экземпляра класса и инициализации переменных. Конструктор в вашем классе Cat всего один, это значит , что путей создать экземпляр данного класса, кроме как вызвать единственный конструктор, просто не существует. Отношение is a дочернего класса теперь вынуждает все дочерние классы вызывать данный конструктор суперкласса, ведь другим путем создать объект теперь невозможно. Посему вам нужно переписать свой класс Cat, добавив геттер для имени.

public class Cat {
    private String name;
    public Cat(String name) {
        this.name = name;
    }
    public String getName() {
        return name;
    }
    public void run() {
        System.out.println("Бег");
    }
}

А все дочерние классы написать таким образом, чтобы в конструкторе было обращение к конструктору класса родителя (super(name)).

public class Tiger extends Cat {
    public Tiger(String name) {
        super(name);
    }
    @Override
    public void run() {
        System.out.println("Тигр бежит");
    }
}

При этом переменная String name в каждом классе уже не нужна, ведь она есть у родителя.

Класс Doctor теперь будет выглядеть так (обращение к переменной через гетер)

public class Doctor {
    public void healCat(Cat cat) {
        System.out.println("Пациент " + cat.getName() + " здоров");
        cat.run();
    }
}
READ ALSO
не получается сделать дамп в mysql

не получается сделать дамп в mysql

проблема в следующем, пишу в консоль mysql mysqldump -u имя_пользователя -p имя_базы_данных > путь_и_имя_файла_дампа, вылетает ошибка error (42000) You have an error in your SQL syntacsis

234
Создание нескольких TextView и их прокрутка

Создание нескольких TextView и их прокрутка

Как сделать добавление нескольких(!) TextView, повесить на них onClick и их прокрутку?

200
написание строки из массива double[] array

написание строки из массива double[] array

Имеется массив дробных чисел{100

200
Не могу сделать приложение JavaFX

Не могу сделать приложение JavaFX

Сделал приложение на JavaFX решил "скомпоновать" в приложениеРаботаю в Intellij IDEA лицензия, когда хочу создать модуль в Artifacts JavaFX Applicaton, при выборе...

155