Полиморфизм в Java ошибка: не удается найти символ - PullRequest
0 голосов
/ 19 января 2019

Я только начал изучать объектно-ориентированное программирование сначала из книги java. В нем говорилось, что полиморфизм позволяет мне создать массив типа суперкласса, а затем иметь все подклассы в качестве элементов массива. Но когда я попытался написать кодиспользуя те же принципы, что он допустил ошибку, сказав error: cannot find symbol Я сделал классы суперклассом животного класса, и класс собаки расширил класс животного, имея собственный метод выборки, но когда я ссылался на переменную собаки как животное, он не работал здесьэто код

Класс животных

public class animal{
String family;
String name;
public void eat()
{
    System.out.println("Ghap Ghap");
}
public void roam()
{
    System.out.println("paw paw");
}
}

Класс собаки

public class dog extends animal{
public void fetch(){
    System.out.println("Auoooooooo");
}
}

Класс тестера

public class tester{
public static void main(String args[]){
    animal doggie = new dog();
    doggie.fetch();
    doggie.eat();
    doggie.roam();
}

}

Ошибка

tester.java:4: error: cannot find symbol
doggie.fetch();
      ^
symbol:   method fetch()
location: variable doggie of type animal
1 error

Ответы [ 3 ]

0 голосов
/ 19 января 2019

Поскольку метод fetch () не существует в animal, он выдает ошибку.Вы можете определить метод выборки в animal и переопределить его в классе собаки.

0 голосов
/ 19 января 2019

При использовании полиморфизма, если вы создаете экземпляр подкласса и сохраняете его ссылку в переменной типа суперкласса, вы можете вызывать только те методы только для вновь созданного экземпляра, в котором присутствует супер класс .

В своем коде вы создали экземпляр класса dog и сохранили его ссылку в doggie типа animal (суперкласс собаки). В таком случае вы не можете вызвать какой-либо метод для dog экземпляр класса, который недоступен в animal классе.

fetch метод не определен в классе animal, следовательно, вы получаете ошибку.

Решение

Либо определите метод fetch в animal классе

OR

изменить

animal doggie = new dog();

до

dog doggie = new dog();
0 голосов
/ 19 января 2019

Вы ссылаетесь на doggie.fetch(), но это не метод, определенный в animal.

Поскольку вы используете doggie объект как животное, вы не можете использовать этот метод.

Если вы хотите использовать метод, вы можете сделать что-то вроде проверки экземпляра:

 if(doggie instanceOf dog){
    ((dog)doggie).fetch();
 }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...