Klassen Vererbung - Tierlaut

Vorudor

Mitglied
Hallo!


mein erstes Posting hier ist auch gleich eine Frage:


Ich habe eine Hauptklasse Tier.

Dann gibt es Unterklassen Katze, Hund & Löwe.

In Tier steht die Methode abstract gibLaut().

Nun soll beim Aufruf dieser Methode ein zum jeweiligen Tier passendes Syso ausgegeben werden.

Bsp.:
- Die Katze macht miau.
- Der Hund macht wuff.
- Der Löwe brüllt.


Ich müsste also in der Tier-Klasse eine Abfrage implementieren, die herausfindet, von welcher Unterklasse aus die Methode abstract gibLaut() aufgerufen wird - wenn ich das richtig verstehe.


Kann mir jemand verraten, wie das zu lösen wäre?
 
Zuletzt bearbeitet von einem Moderator:
G

Gast2

Gast
Ich müsste also in der Tier-Klasse eine Abfrage implementieren, die herausfindet, von welcher Unterklasse aus die Methode abstract gibLaut() aufgerufen wird - wenn ich das richtig verstehe.
Falsch verstanden. Den folgenden Auszug kannst du dir nochmal durchlesen:
Java ist auch eine Insel – 6.10 Abstrakte Klassen und abstrakte Methoden

Bei
Java:
Tier t = new Maus();
t.gibLaut();
sorgt Java dafür dass die Methode gibLaut der Klasse Maus aufgerufen wird. In der Klasse Tier musst du gar keine Unterscheidungen machen.
 

Crian

Top Contributor
Und das ist wichtig. Denn sonst müsste die Klasse Tier über alle von ihr abgeleiteten Klassen Bescheid wissen, was das ganze Konzept ad absurdum führen würde.
 

Vorudor

Mitglied
Ich stell mal die Angabe hier rein (ist ausm Studium)

Realisieren Sie folgendes Klassenbeispiel:

In einem Zoo halten sich Tiere (abstrakte Klasse) auf, die jeweils einen
Kosenamen und ein Gewicht aufweisen – für diese beiden Attribute sind
jeweils auch Getter- und Setter-Methoden zu realisieren, wobei die
Attribute private deklariert werden sollen.

Es sind 2 Konstruktoren zu erstellen:
- Der erste beinhaltet keine Parameter und setzt das Gewicht auf 100
und den Kosenamen auf ““.
- Der zweite hat 2 Parameter für Gewicht und Kosenamen.

Weiters kann jedes Tier im Zoo charakteristisch Laut geben (abstrakte
Methode gibLaut()).
Als Unterklassen sind nun die Tiere Loewe, Hund und Katze zu erstellen.
Alle erben von Tier und realisieren eine charakteristische gibLaut()-
Methode (die Katze Mitzi würde zum Beispiel „Die Katze Mitzi
miaut“ ausgeben). Weiters soll der Konstruktor der Unterklassen jeweils
den passenden Konstruktor der Oberklasse mit Hilfe des Schlüsselworts
super aufrufen.
Erstellen Sie zusätzlich eine Testklasse, die mehrere Tiere anlegt und alle
Methoden ausprobiert.
Welche gibLaut()-Methode wird bei folgendem Codeausschnitt aufgerufen:
Tier katze = new Katze(“Mitzi“, 100);
katze.gibLaut();


Stimmt es, dass die gibLaut()-Methode in Tier implementiert werden soll?
Denn wenn ich dann t.gibLaut() aufrufe, weiß das Programm ja erst wieder nicht, welches Tierchen jetzt gerade dran ist!? ???:L
 

TKausL

Top Contributor
Weiters kann jedes Tier im Zoo charakteristisch Laut geben (abstrakte
Methode gibLaut()).
Alle erben von Tier und realisieren eine charakteristische gibLaut()-
Methode (die Katze Mitzi würde zum Beispiel „Die Katze Mitzi
miaut“ ausgeben).

Da steht es doch. Abstrakt, jede Unterklasse realisiert seine eigene Methode dazu.
 
G

Gast2

Gast
in der abstrakten Klasse Tier definierst du die Methode
Java:
public abstract void gibLaut();
Damit zwingst du jede Klasse die von Tier erbt diese Methode zu implementieren.
Die Implementierung an sich steht er in den jeweiligen Unterklassen.
 
S

SlaterB

Gast
> Denn wenn ich dann t.gibLaut() aufrufe, weiß das Programm ja erst wieder nicht, welches Tierchen jetzt gerade dran ist!?

wenn in der Variablen t ein Katze-Objekt steckt, weiß das Programm das bzw. kann es testen, keine Sorge,

die Aufgabenstellung schreibt auch, dass du in allen Unterklassen die Methode implementieren sollst
(Alle erben von Tier und realisieren eine charakteristische gibLaut()-Methode),
so ist es korrekt, 100%ig
 

Vorudor

Mitglied
So ganz kapier ich das mit dem abstract noch nicht.


Ich schreibe in der Tier-Klasse das gibLaut() rein.


und wo kommt dann der richtige Text hin?


Sorry, aber da verzwirbelt sich gerade mein Verstand...
 
G

Gast2

Gast
Die eigentliche Implementierung der Methode kommt in die jeweiligen Unterklassen.


Java:
public abstract class Tier {
	public abstract void gibLaut();
}

Java:
public class Maus extends Tier {
	@Override
	public void gibLaut() {
		System.out.println("Pfiep pfiep");
	}
}

Java:
Tier maus = new Maus();
maus.gibLaut();

EDIT:
Korrigiert..
 

TKausL

Top Contributor
Dann hast du wohl nicht aufgepasst...

Schreibe in die Tier-Klasse einfach mal
Java:
public abstract gibLaut();

Erstelle eine Klasse
Java:
public class Katze extends Tier {

}

Und Eclipse sollte dir direkt den Fehler anzeigen.

Edit:


Java:
Tier maus = new Maus();
t.gibLaut();


So wird das nicht funktionieren :D
 

Vorudor

Mitglied
Denke mit dieser Lösung fahr ich ganz gut. [poste es gleich mit - vielleicht nützt es ja jemandem mal was]


Danke viemals für die Hilfe!!! :oops:




Tier
Java:
package UebungVererbung;

public abstract class Tier 
{
	private String kosename;
	private double gewicht;
	
	// getter
	
	public String getKosename()
	{
		return this.kosename;
	}
	
	public double getGewicht()
	{
		return this.gewicht;
	}
	
	// setter
	
	public void setKosename(String kosename)
	{
		this.kosename = kosename;
	}
	
	public void setGewicht(double gewicht)
	{
		this.gewicht = gewicht;
	}
	
	// Konstruktor 1
	
	public Tier()
	{
		this.kosename = "";
		this.gewicht = 100;
	}
	
	// Konstruktor 2
	
	public Tier(String kosename, double gewicht)
	{
		this.kosename = kosename;
		this.gewicht = gewicht;
	}
	
	// gibLaut()
	
	public abstract void gibLaut();
}

Loewe
Java:
package UebungVererbung;

public class Loewe extends Tier
{
	public Loewe()
	{
		super();
	}
	
	public Loewe(String kosename, double gewicht)
	{
		super(kosename, gewicht);
	}
	
	public void gibLaut() 
	{
        System.out.println("Der Löwe " + this.getKosename() + " macht *grow*");
    }
}

Katze
Java:
package UebungVererbung;

public class Katze extends Tier
{
	public Katze()
	{
		super();
	}
	
	public Katze(String kosename, double gewicht)
	{
		super(kosename, gewicht);
	}
	
	public void gibLaut() 
	{
        System.out.println("Die Katze " + this.getKosename() + " macht *miau*");
    }
}

Hund
Java:
package UebungVererbung;

public class Hund extends Tier
{
	public Hund()
	{
		super();
	}
	
	public Hund(String kosename, double gewicht)
	{
		super(kosename, gewicht);
	}
	
	public void gibLaut() 
	{
        System.out.println("Der Hund " + this.getKosename() + " macht *wuff*");
    }
}

TierTest
Java:
package UebungVererbung;

public class TierTest 
{
	public static void main(String[] args)
	{
		Tier m = new Katze();
		Tier n = new Katze("Kätzle", 2);
		
		Tier o = new Hund();
		Tier p = new Hund("Schnaufi", 9);
		
		Tier q = new Loewe();
		Tier r = new Loewe("Simba", 30);
		
		
		m.gibLaut();
		n.gibLaut();
		
		o.gibLaut();
		p.gibLaut();
		
		q.gibLaut();
		r.gibLaut();
	}

}
 

headnut

Gesperrter Benutzer
Java:
    // gibLaut()
    
    public abstract void gibLaut();

Ich glaube das funktioniert nicht, und die superklasse gibLaut im Tier rufst du nirgends auf oder?
 

TKausL

Top Contributor
Die steht da, dass du sie in Kindklassen einbauen MUSST!
Das hat zur Folge, dass du die Methode aufrufen kannst, auch wenn du eine new Maus() in den Datentyp "Tier" speicherst. Hättest du sie nicht in der Tier-Klasse als abstrakt drin, könntest du sie auch nicht über das Tier aufrufen sondern müsstest die Tiere einzeln erstmal casten.
 

Vorudor

Mitglied
Aha!

So langsam erschließt sich mir der Sinn & Zweck von abstracts.

Damit im Zusammenhang von Superklassen geb ich also gewisse Anforderungen bzw Einschränkungen für die Kindklassen vor. Also so eine Art Rahmen, in den sich das Kind einpassen muss...
 

headnut

Gesperrter Benutzer
Hehe

hab mich auch gerade schlau gemacht:) Bin in etwa bei meinm Studium gleich weit.

Ja genau so siehts aus, du gibst gewisse Vorgaben weiter, die du sogar noch weiter runter geben könntest.
 
E

emailundlos

Gast
So, genug gebrüllt...

Zur Laufzeit wird abhängig von dem konkreten Objekt die entsprechende Methode aufgerufen, d.h. wenn gibLaut aus Tier überschrieben/implementiert wurde und ein Objekt dieser Klasse erstellt wird (und dann darauf die Methode aufgerufen wird), dann wird immer die Methode der zu dem erstellten Objekt gehörenden Klasse aufgerufen.
 
G

Gitarre

Gast
Wurde schon viel und verständliches gesagt.

Ansonsten könnte man sich den [c]abstract[/c] Modifizierer, auch so vorstellen, dass er dort eingesetzt wo de Implementierungs-code nicht in derselben [c]abstract[/c] geschrieben wird.
Wenn es nur eine abstrakte Methode in einer Klasse gibt muss auch die Klasse abstrakt sein.
Aber man kann auch nicht abstrakte einfügen, also vermischen.

Abstrakte Methoden haben keinen [c]body[/c].

Java:
public abstract void gibLaut();

// kein Implementierungs-code

Daher kann es nur Sinn machen wenn man [c]abstract[/c] auch erweitert.
Erweitert bedeutet, Polymorphie, also die Methode überschreibt.

Java:
public class Katze extends Tier {

public void gibLaut() {
 
 // hier Code Implementieren

Anstat Methoden kann man auch Klassen [c]abstract[/c] machen.
Um zu verhindern das die Klasse instanziert wird.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
imocode Vererbung Problem mit Vererbung Java Basics - Anfänger-Themen 2
M Vererbung - Polymorphie Java Basics - Anfänger-Themen 37
L Java- Vererbung Java Basics - Anfänger-Themen 4
ineedhelpinjava Vererbung Java Basics - Anfänger-Themen 12
ineedhelpinjava Vererbung Java Basics - Anfänger-Themen 1
I JSON / XML Struktur mit Vererbung / Interfaces Java Basics - Anfänger-Themen 0
M Interface oder Vererbung? Java Basics - Anfänger-Themen 12
M Vererbung Java Basics - Anfänger-Themen 6
M Designentscheidung von Attributen/Methoden im Falle von Vererbung Java Basics - Anfänger-Themen 8
M Generics Vererbung Listen Java Basics - Anfänger-Themen 2
A Methoden Vererbung und Interface Java Basics - Anfänger-Themen 14
D Klassen und Vererbung Java Basics - Anfänger-Themen 2
U Vererbung Java Basics - Anfänger-Themen 7
D Vererbung Java Basics - Anfänger-Themen 3
K Schleife berechnet kein Ergebnis (Vererbung) Java Basics - Anfänger-Themen 6
00111010101 Objektorientiertes Programmieren mit Vererbung (Zahlen in Array verschwinden) Java Basics - Anfänger-Themen 3
W Zur Vererbung: Wann und wie? Java Basics - Anfänger-Themen 35
H Datenkapselung, Vererbung und UML Java Basics - Anfänger-Themen 16
districon Super-Stichwort/ Vererbung Java Basics - Anfänger-Themen 3
YaU Vererbung erstellt NullPointerException? Java Basics - Anfänger-Themen 4
1 Vererbung Klassenattribute Java Basics - Anfänger-Themen 9
TimoN11 Frage zu Java-Vererbung (Cast) Java Basics - Anfänger-Themen 5
N Thema Vererbung Java Basics - Anfänger-Themen 31
A Vererbung Vererbung Übung Java Basics - Anfänger-Themen 5
B Vererbung - Sichtbarkeitsmodifikation - protected Java Basics - Anfänger-Themen 10
B Best Practice Unschlüssig ob Vererbung oder Interface Java Basics - Anfänger-Themen 2
G Java Vererbung Java Basics - Anfänger-Themen 8
Y Vererbung Konto - Anfangsprobleme Java Basics - Anfänger-Themen 7
A Vererbung Klassen im Bezug auf Auto´s Java Basics - Anfänger-Themen 18
A Klassen Vererbung und zusätzliche Unterklassen Java Basics - Anfänger-Themen 23
M Vererbung mit Enums Java Basics - Anfänger-Themen 8
Kirby.exe Vererbung im Detail erklärt? Java Basics - Anfänger-Themen 9
N Modellierung, vererbung, Java Basics - Anfänger-Themen 163
M Fehlendes Verständnis für dynamische Bindung und Vererbung Java Basics - Anfänger-Themen 13
W OOP Vererbung im Computerspiel Java Basics - Anfänger-Themen 7
J Probleme mit Vererbung Java Basics - Anfänger-Themen 4
I Vererbung Java Basics - Anfänger-Themen 13
W OOP Vererbung und Problem bei Zählschleife in einer Methode Java Basics - Anfänger-Themen 10
W Methoden Verständnisfrage Vererbung von Methoden Java Basics - Anfänger-Themen 14
V Vererbung Java Basics - Anfänger-Themen 2
J Frage zur Vererbung Java Basics - Anfänger-Themen 1
J Vererbung Java Basics - Anfänger-Themen 3
U Was löst meine NullPointerException aus? (Vererbung) Java Basics - Anfänger-Themen 12
O Vererbung Ueben mit kleiner Datenstruktur von Räumen Java Basics - Anfänger-Themen 10
O Umgang mit Vererbung verstehen Java Basics - Anfänger-Themen 4
A Vererbung/Interfaces/Generics Java Basics - Anfänger-Themen 12
O Vererbung änderung des Konstruktors Java Basics - Anfänger-Themen 8
L Vererbung Java Basics - Anfänger-Themen 5
E HashMap+Vererbung Java Basics - Anfänger-Themen 11
E Vererbung super-Methoden Aufruf Java Basics - Anfänger-Themen 3
B Java Vererbung Fragen (zu Code Beispiel) Java Basics - Anfänger-Themen 3
A Objekterstellung bei der Vererbung Java Basics - Anfänger-Themen 7
P Vererbung Warum funktioniert die Vererbung hier nicht Java Basics - Anfänger-Themen 14
S Vererbung Java mehrfach Java Basics - Anfänger-Themen 10
B Objekte zählen/ Vererbung/ Kopplung/ Interface/ Abstract Class Java Basics - Anfänger-Themen 5
A Klassen Vererbung privater Methoden und Member Java Basics - Anfänger-Themen 12
A Konstruktoren Vererbung Java Basics - Anfänger-Themen 3
ReinerCoder Vererbung von JFrame in einer Klasse entfernen Java Basics - Anfänger-Themen 5
W Vererbung, abstract und Konstruktoren Java Basics - Anfänger-Themen 30
J Vererbung und Methodenaufruf Java Basics - Anfänger-Themen 11
G Polymorphie, Vererbung, statischer Typ, Laufzeittyp Java Basics - Anfänger-Themen 2
H Vererbung mit private instanzvariablen Java Basics - Anfänger-Themen 9
S Vererbung Funktionsweise Code zur Vererbung Java Basics - Anfänger-Themen 1
C Methoden Vererbung private Attribute/public Methoden Java Basics - Anfänger-Themen 4
S Verständnis Vererbung Java Basics - Anfänger-Themen 3
D JavaFX Vererbung Java Basics - Anfänger-Themen 2
U Vererbung Generizität und Vererbung Java Basics - Anfänger-Themen 4
A Vererbung bei Klassen mit Objekt der Klasse im Konstruktor Java Basics - Anfänger-Themen 4
K Vererbung Octagon von Circle Java Basics - Anfänger-Themen 0
B Hilfe bei Vererbung Java Basics - Anfänger-Themen 2
D Vererbung Frage zum Klassenaufbau mit Vererbung Java Basics - Anfänger-Themen 1
T Vererbung und interface. Java Basics - Anfänger-Themen 1
S Gehaltsberechnung (Vererbung, abstrakte Methoden) Java Basics - Anfänger-Themen 6
S Vererbung Java Basics - Anfänger-Themen 1
F Vererbung in zwei Richtungen? Java Basics - Anfänger-Themen 14
D Vererbung / Polymorphie Java Basics - Anfänger-Themen 5
O Vererbung Java Basics - Anfänger-Themen 5
MiMa Vererbung Theorie OK, Praxis ?? Java Basics - Anfänger-Themen 4
Arif Vererbung Vererbung Variablen überschreiben Java Basics - Anfänger-Themen 1
C Vererbung - Ausgaben bestimmen Java Basics - Anfänger-Themen 6
S Vererbung Java Basics - Anfänger-Themen 10
L Setter und Getter/Vererbung Java Basics - Anfänger-Themen 6
C Konstruktoren und Vererbung Java Basics - Anfänger-Themen 2
J Kleinere Frage zur Vererbung/Objekterzeugung Java Basics - Anfänger-Themen 2
G Vererbung Java Basics - Anfänger-Themen 12
J Vererbung privater Variablen Java Basics - Anfänger-Themen 7
J Vererbung Vererbung von Methoden Java Basics - Anfänger-Themen 6
B Vererbung Java Basics - Anfänger-Themen 12
K Vererbung (super) Java Basics - Anfänger-Themen 2
A ArrayQueue mit Exceptions und Vererbung Java Basics - Anfänger-Themen 3
J Java: static bei Vererbung Java Basics - Anfänger-Themen 5
C Vererbung Java Basics - Anfänger-Themen 4
L Vererbung Java Basics - Anfänger-Themen 3
J Klassenorganisation | Vererbung Java Basics - Anfänger-Themen 1
B Vererbung Vererbung Java Basics - Anfänger-Themen 2
N Generics Vererbung Wildcard Interface Java Basics - Anfänger-Themen 8
A Benötige Hilfe bei Vererbung Java Basics - Anfänger-Themen 1
M Anfängerprobleme mit Vererbung Java Basics - Anfänger-Themen 27
J Vererbung Java Basics - Anfänger-Themen 9
F Vererbung von Attributen zwischen zwei Klassen Java Basics - Anfänger-Themen 6

Ähnliche Java Themen

Neue Themen


Oben