Hypercell ein ] Hypercell aus ] Zeige Navigation ] Verstecke Navigation ]
c++.net  
   

Die mobilen Seiten von c++.net:
https://m.c-plusplus.net

  
C++ Forum :: Java ::  Java Vererbung und Methoden überschreiben     Zeige alle Beiträge auf einer Seite Auf Beitrag antworten
Autor Nachricht
Jojo92
Unregistrierter




Beitrag Jojo92 Unregistrierter 18:32:12 19.11.2016   Titel:   Java Vererbung und Methoden überschreiben            Zitieren

Guten Abend,

ich stehe gerade vor einem Problem. Ich versuche es mal vom Prinzip zu erklären wobei die Klassen die hier erwähnt werden andere sind.

Ich habe eine Klasse "Figuren" die über öffentliche Methoden mit Objekten der Klasse "Rechteck" arbeitet. Nun möchte ich eine Klasse "FigurenErweitert" haben, die von der Klasse "Figuren" abgeleitet ist und auch die gleichen Methoden bereitstellen soll. Zudem soll es eine Klasse "RechteckErweitert" geben die von der Klasse "Rechteck" abgeleitet ist. Die Klasse "FigurenErweitert" soll dann anstatt mit den "Rechteck" Objekten mit den "RechteckErweitert" Objekten arbeiten. Da die Methoden die selben Aufgaben erfüllen sollen, möchte ich diese ungern überschreiben, da ich mir sonst das Vererben auch sparen könnte.

Meine Frage: Wie kann ich der "FigurenErweitert" sagen, dass die Variablen in den geerbten Methoden statt vom Typ "Rechteck", nun vom Typ "RechteckErweitert" sein sollen?

Viele Grüße
Gregor
Moderator

Benutzerprofil
Anmeldungsdatum: 16.01.2002
Beiträge: 8607
Beitrag Gregor Moderator 22:07:45 19.11.2016   Titel:              Zitieren

Man kann in Java nur von einer Klasse erben. Multiple Vererbung kann zu Problemen führen, wenn mehrere Oberklassen Methoden mit identischen Signaturen implementieren oder Attribute mit identischem Namen haben.

Was man machen kann ist die Nutzung von Interfaces. Du könntest die Methoden, die Du in einer der Superklassen definieren möchtest, erstmal nur völlig abstrakt in dem Interface definieren. Und dann kann die Klasse "FigurenErweitert" eben von einer Klasse erben und zusätzlich noch ein Interface implementieren.

Unter Umständen könnte es auch sinnvoll sein, die Vererbungshierarchie noch in anderer Weise zu überdenken. Aber um hier etwas zu sagen, müsstest Du mehr Kontext liefern.

_________________
"Die Mathematiker sind eine Art Franzosen: Redet man zu ihnen, so übersetzen sie es in ihre Sprache, und dann ist es alsobald ganz etwas anderes." - Johann Wolfgang von Goethe
Vermuter
Unregistrierter




Beitrag Vermuter Unregistrierter 08:42:33 21.11.2016   Titel:              Zitieren

Hi,

Ich denke, dass Geregor dich falsch verstanden hat.

Wenn ich dich hingegen richtig verstanden habe, schaut deine Klassenstruktur so aus:

Java:
public class Figuren
{
    public void doSomethingWithRechteck(Rechteck rechteck)
    {
        rechteck.doSomething();
    }
}


Java:
public class Rechteck
{
    public void doSomething()
    {
    }
}


Java:
public class FigurenErweitert
{
    public void doSomethingWithRechteckErweitert(RechteckErweitert rechteckErweitert)
    {
        rechteckErweitert.doSomething();
    }
}


Java:
public class RechteckErweitert extends Rechteck
{
}


Du würdest jetzt gerne doSomethingWithRechteck/doSomethingWithRechteckErweitert nur einmal definieren, da der Inhalt gleich ist.

In diesem Fall könntest du in der Klasse Figuren Generics verwenden (Syntax evtl. falsch, da ich momentan kein Java mache):

Java:
public class Figuren<TRechteck extends Rechteck>
{
    public void doSomethingWithRechteck(TRechteck rechteck)
    {
        rechteck.doSomething();
    }
}


Java:
public class Rechteck
{
    public void doSomething()
    {
    }
}


Java:
public class RechteckErweitert extends Rechteck
{
}


Dann kannst du sowohl Rechteck als auch RechteckErweitert an eine Instanz von Figuren übergeben:

Java:
Figuren<Rechteck> rechteckFiguren = new Figuren<Rechteck>();
Rechteck rechteck = new Rechteck();
rechteckFiguren.doSomething(rechteck);
 
Figuren<RechteckErweitert> rechteckErweitertFiguren = new Figuren<RechteckErweitert>();
RechteckErweitert rechteckErweitert = new RechteckErweitert();
rechteckErweitertFiguren.doSomething(rechteckErweitert);
C++ Forum :: Java ::  Java Vererbung und Methoden überschreiben   Auf Beitrag antworten

Zeige alle Beiträge auf einer Seite




Nächstes Thema anzeigen
Vorheriges Thema anzeigen
Sie können Beiträge in dieses Forum schreiben.
Sie können auf Beiträge in diesem Forum antworten.
Sie können Ihre Beiträge in diesem Forum nicht bearbeiten.
Sie können Ihre Beiträge in diesem Forum nicht löschen.
Sie können an Umfragen in diesem Forum nicht mitmachen.

Powered by phpBB © 2001, 2002 phpBB Group :: FI Theme

c++.net ist Teilnehmer des Partnerprogramms von Amazon Europe S.à.r.l. und Partner des Werbeprogramms, das zur Bereitstellung eines Mediums für Websites konzipiert wurde, mittels dessen durch die Platzierung von Werbeanzeigen und Links zu amazon.de Werbekostenerstattung verdient werden kann.

Die Vervielfältigung der auf den Seiten www.c-plusplus.de, www.c-plusplus.info und www.c-plusplus.net enthaltenen Informationen ohne eine schriftliche Genehmigung des Seitenbetreibers ist untersagt (vgl. §4 Urheberrechtsgesetz). Die Nutzung und Änderung der vorgestellten Strukturen und Verfahren in privaten und kommerziellen Softwareanwendungen ist ausdrücklich erlaubt, soweit keine Rechte Dritter verletzt werden. Der Seitenbetreiber übernimmt keine Gewähr für die Funktion einzelner Beiträge oder Programmfragmente, insbesondere übernimmt er keine Haftung für eventuelle aus dem Gebrauch entstehenden Folgeschäden.