Ich habe gerade angefangen, objektorientierte Programmierung aus dem Buch zu lernen. Es heißt, dass Polymorphismus es mir ermöglicht, ein Array vom Typ der Oberklasse zu erstellen und dann alle Unterklassen als Array-Elemente zu haben. Aber als ich versuchte, Code mit demselben zu schreiben Prinzipien, auf die es Fehler gab, zu sagen error: cannot find symbol Ich habe die Klassen gemacht, die Superklasse war Tier und die Hundeklasse hat die Tierklasse mit einer eigenen Abrufmethode erweitert, aber als ich die Hundevariable als Tier bezeichnet habe, hat es hier nicht funktioniert, ist der Code

Die Tierklasse

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

Die Hundeklasse

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

Die Tester-Klasse

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

}

Der Fehler

tester.java:4: error: cannot find symbol
doggie.fetch();
      ^
symbol:   method fetch()
location: variable doggie of type animal
1 error
5
Mrak Vladar 19 Jän. 2019 im 15:00

3 Antworten

Beste Antwort

Wenn Sie bei Verwendung von Polymorphismus eine Instanz der Unterklasse erstellen und deren Referenz in einer Variablen vom Typ Oberklasse speichern, können Sie nur die Methoden für die neu erstellte Instanz aufrufen, die in der Superklasse vorhanden sind Klasse .

In Ihrem Code haben Sie eine Instanz der Klasse dog erstellt und ihre Referenz in doggie vom Typ animal (Superklasse des Hundes) gespeichert. In diesem Fall können Sie nicht aufrufen Jede Methode für die Klasseninstanz dog, die in der Klasse animal nicht verfügbar ist.

Die Methode fetch ist in der Klasse animal nicht definiert, daher wird der Fehler angezeigt.

Lösung:

Definieren Sie entweder die Methode fetch in der Klasse animal

ODER

Veränderung

animal doggie = new dog();

Zu

dog doggie = new dog();
6
Yousaf 19 Jän. 2019 im 12:18

Sie verweisen auf doggie.fetch(), dies ist jedoch keine im Tier definierte Methode.

Da Sie Ihr doggie Objekt als Tier verwenden, können Sie diese Methode nicht verwenden.

Wenn Sie die Methode verwenden möchten, können Sie so etwas wie eine Instanzprüfung durchführen:

 if(doggie instanceOf dog){
    ((dog)doggie).fetch();
 }
2
Stefan 19 Jän. 2019 im 12:07

Da die Methode fetch () in animal nicht vorhanden ist, wird der Fehler ausgelöst. Sie können eine Abrufmethode in animal definieren und in der Hundeklasse überschreiben.

2
Ratish Bansal 19 Jän. 2019 im 12:10