У меня есть два класса животных и собак. Как вы можете просить собаку простираться от животного. Я могу написать эти классы без проблем, но я заметил, что я могу создать новый объект собаки, как это:Объект Java hold с классом суперкласса объекта
Dog firstDog = new Dog("rocky");
Это нормально, но когда я пытаюсь создать новый экземпляр, как это:
Animal secondDog = new Dog("alex");
Нет никаких ошибок, но я не могу получить никаких полей или методов, которые я написал в классе Dog, даже если они являются общедоступными, поэтому, если я хочу сохранить объект в переменной, тип которой совпадает с типом суперкласса, я могу область охвата и методы, которые реализуют только этот суперкласс (для этого примера имя, цвет, setColor() и toString()), и нет никакого способа достичь полей и методов, которые реализованы в s ubclass. Правильно ли я понял, когда я пытаюсь вызвать функцию toString() функции secondDog, она вызывает метод, который я написал в классе Dog, я знаю, что переопределяю эту функцию в классе Dog, но я не могу использовать другие методы, которые я реализовал в классе Dog , Как java справляется с этим?
животных Класс:
public class Animal {
private String name;
private String color;
public Animal(String name){
this.name=name;
}
public void setColor(String color){
this.color=color;
}
public String toString(){
return"Hi, my name is " + this.name + ". I'm " + this.color;
}
}
Dog Класс:
public class Dog extends Animal {
private int age;
public Dog(String name){
super(name);
setColor("gray");
this.age = 7;
}
public String speakDog(){
return"wof!";
}
public String toString(){
return super.toString() + " and I " + speakDog();
}
}
Возможного дубликата [Может родитель Java вызов переопределить метод в других объектах, но не подтип?] (HTTP: // StackOverflow. ком/вопросы/1032847/может-ява-колл-родитель-переопределен-метод-в-других-объектов, но-не-подтипа); http://stackoverflow.com/questions/10985223/java-polymorphism –