Всем привет. Изучаю ООП вместе с Java и наткнулся на вот такие грабли: у меня есть класс Animal. В нем есть всего лишь одна переменная name. При создании объекта Animal вызывается конструктор, который выводит на экран сообщение "Новое животное создано. Его имя name.". Далее я создал класс Cat который унаследован от Animal и я хочу, чтобы когда я делал так Animal cat = new Cat("Кошка"); у меня на экран выводилось сообщение "Была создана новая кошка. Ее имя name". Я пытаюсь сделать это в конструкторе класса Cat, но он ругается, говорит, мол можно только так
public Cat(String name) {
super(name);
}
Но я так не хочу. Можно ли как то переопределить конструктор в дочернем классе? Или это бред и нужно действовать по другому? Полный код ниже.
public class Main {
public static void main(String[] args) {
Animal animal = new Animal("Лео");
Animal cat = new Cat("Кошка");
}
}
public class Animal {
private String name;
public Animal(String name) {
this.name = name;
System.out.println("Новое животное создано. Его имя: " + this.name);
}
}
public class Cat extends Animal {
public Cat(String name) {
super(name);
}
}
Тогда я не смогу давать имена животным при созданиина чем основано это утверждение? – Алексей Шиманский Aug 19 '16 at 14:18Cat cat=new Cat("cat")иAnimal cat=new Cat("cat")отличаются следующем. В первом случая создается объект типа Cat и ему присваивается ссылка на тот же тип. т.е. по этой ссылке будут поступны методы и поля объявленные и в классеCatи в классеAnimal. Во втором случае тоже создается объект типаCatно он уже будет доступен через ссылку типаAnimal. соответсвенно доступность методов и полей будет другая. – Artem Aug 19 '16 at 14:45