Interfaces/Klassen etc.

Kloman01

Mitglied
Hallo,
ich habe 5 Interfaces :
Vehicle
Car, abgeleitet von Vehicle
Aircraft, abgeleitet von Vehicle
Boat, abgeleitet von Vehicle
Ufo
und 7 Klassen :
Porsche, implementiert Car
VW, impl. Car
Airbus, impl. Aircraft
Ferry, impl. Boat,
Seaplane, impl. Aircraft und Boat
Tricycle, impl. Vehicle
Ufo1, impl. Ufo und Aircraft
Ich soll ein Array mit den Objecten New Klasse einfügen.

Java:
Vehicle[] anArray = new Vehicle[7];
		anArray[0] = new ClassTricycle();
		anArray[1] = new ClassPorsche();
		anArray[2] = new ClassVW();
		anArray[3] = new ClassAirbus();
		anArray[4] = new ClassFerry();
		anArray[5] = new ClassSeaplane();
		anArray[6] = new ClassFlyingSaucer();

Anschließend soll mit einer for-each Schleife die einzelen Ausgegeben werden, sprich z.B. nur Car.

Java:
for (int i = 0; i < anArray.length; i++) {
			if (anArray[i] instanceof Car) {
			for (Vehicle anVehicle : anArray) {
					System.out.println(anVehicle);
				}
			}
		}

So habe ich mir das Ganze gedacht, doch das Ergebnis sieht so aus :
Tricycle
Porsche
VW
Airbus
Ferry
Seaplane
FlyingSaucer

Aufgabe6.ClassTricycle@15db9742
Aufgabe6.ClassPorsche@6d06d69c
Aufgabe6.ClassVW@7852e922
Aufgabe6.ClassAirbus@4e25154f
Aufgabe6.ClassFerry@70dea4e
Aufgabe6.ClassSeaplane@5c647e05
Aufgabe6.ClassFlyingSaucer@33909752
Aufgabe6.ClassTricycle@15db9742
Aufgabe6.ClassPorsche@6d06d69c
Aufgabe6.ClassVW@7852e922
Aufgabe6.ClassAirbus@4e25154f
Aufgabe6.ClassFerry@70dea4e
Aufgabe6.ClassSeaplane@5c647e05
Aufgabe6.ClassFlyingSaucer@33909752
Aufgabe6.ClassTricycle@15db9742
Aufgabe6.ClassPorsche@6d06d69c
Aufgabe6.ClassVW@7852e922
Aufgabe6.ClassAirbus@4e25154f
Aufgabe6.ClassFerry@70dea4e
Aufgabe6.ClassSeaplane@5c647e05
Aufgabe6.ClassFlyingSaucer@33909752

Es wurden also trotzdem alle 7 ausgegeben. Das nicht-Fett geschriebene im Zitat ist mir auch ein Rätsel.
Wo liegt mein Fehler ?

Vielen Dank im Voraus !
 
Zuletzt bearbeitet:
warum das nicht fett geschriebene so aussieht liegt daran:

Um ein Object (bzw alles was kein String Objekt ist) auszugeben, braucht dieses eine toString Methode. Jedes Objekt kann man von Haus aus ausgeben allerdings nur mit der toString Methode die jedes Objekt von der Klasse "Object" erbt. Diese Standart toString Methode gibt eben diese Infos aus.

Das heisst um eine sauber Ausgabe zu bekommen musst du in jedem deiner Objekte eine toString Methode schreiben, die einfach nur "Klassenname" zurückgibt.

Java:
public class car{

   public car(){

}
   public String toString(){
      return "Car";
}
}


als Beispiel.
 
Achja und warum alle ausgeben werden liegt daran:

du prüfst in deiner if() der reihe nach ob die Elemente eine Unterklasse sind. wenn ja gibst du alle aus.

dann prüfst du das 2te Element ob es eine Unterklasse ist und gibst wieder in der for schleife alle aus und so weiter

du darfst beim Ausgeben nicht durch die ganze forschleife gehn sondern zu dem einen element

Java:
for (int i = 0; i < anArray.length; i++) {
    if (anArray[i] instanceof Car) {
       //for (Vehicle anVehicle : anArray) {
            System.out.println(anArray[i]);
       //}
    }
}
 
Zuletzt bearbeitet:
Okay. Vielen Dank soweit. Die Aufgabenstellung lautet leider, das man die Ausgabe mit for each schleifen machen soll, und mit Hilfe von instanceof 😀
 
Ich hab das GAnze jetzt so gelöst :

Java:
for(Vehicle anVehicle : anArray) {
			if ( anVehicle instanceof Car){
				System.out.println(anVehicle);
			}

Das funktioniert soweit, vielen Dank !
 

Zurück
Oben