Класс 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
.
Ваш класс 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();
}
}
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
проблема в следующем, пишу в консоль mysql mysqldump -u имя_пользователя -p имя_базы_данных > путь_и_имя_файла_дампа, вылетает ошибка error (42000) You have an error in your SQL syntacsis
Как сделать добавление нескольких(!) TextView, повесить на них onClick и их прокрутку?
Сделал приложение на JavaFX решил "скомпоновать" в приложениеРаботаю в Intellij IDEA лицензия, когда хочу создать модуль в Artifacts JavaFX Applicaton, при выборе...