Наследование полей java
Совсем запутался, помогите.
Есть общий класс Pet
public class Pet {
String name;
}
Есть его наследник класс Cat
public class Cat extends Pet {
private int age;
public Cat(int age) {
this.age = age;
}
}
И я вообще не понимаю, как создать объект класса Cat с именем и возрастом.
Так выдаёт ошибку
Pet cat = new Cat("Имя кота", 12);
Подобный конструктор - не понимает что значит слово super
public Cat(String name, int age) {
super(name);
this.age = age;
}
Ответы (3 шт):
Вариант 1
Добавить соответствующий конструктор в родительский класс (Pet):
public class Pet {
String name;
public Pet(String name) {
this.name = name;
}
}
В паре с вызовом вашего "подобного конструктора" у класса наследника (Cat):
public Cat(String name, int age) {
super(name);
this.age = age;
}
Вариант 2
Явно проинициализировать поле родительского класса (Pet) в конструкторе класса наследника (Cat):
public Cat(String name, int age) {
super.name = name;
this.age = age;
}
При этом не создавая никаких конструкторов в родительством классе (Pet).
Если классы находятся в разных package, то полю name в классе Pet необходимо будет добавить модификатор доступа protected (или выше), чтобы оно было доступно в наследнике.
Дело в том, что вы пытаетесь обратиться к конструктору, которого нет у класса родителя. Для этого необходимо в родителе прописать соответствующий конструктор, сделать это можно следующим образом:
public class Pet {
public Pet(String name) {
this.name = name
}
String name;
}
Таким образом, конструктор класса Cat сможет обратиться к конструктору класса Pet, так как в данном случае этот конструктор стал существовать
Добавьте модификатор protected для поля name у класса Pet:
public class Pet {
protected String name;
}
Тогда у наследников будет доступен this.name и конструктор можно будет написать так:
public Cat(String name, int age) {
this.name = name;
this.age = age;
}