Vererbung: Methoden die eigene Klasse zurückgeben

Status
Nicht offen für weitere Antworten.

GouShou

Mitglied
Da meine erste Frage hier so super schnell beantwortet werden konnte hoffe ich, dass die hier genauso einfach ist. :) (Wobei ich befürchte, dass mein Vorhaben gar nicht möglich ist.)

Ich habe eine Klasse B, welche von der Klasse A abgeleitet ist. A hat Methoden, die Objekte vom Typ A zurückgeben.
Solche Methoden rufe ich jetzt in B auf. Allerdings geben diese Methoden jetzt nicht Objekte von Typ A, sondern vom Typ B zurück (der ja A ist). Kann das nervige casten von A nach B jetzt irgendwie umgangen werden?

Praktisch so, dass jedes Vorkommen von A in B als B interpretiert wird?

Kurzes Code Beispiel:

Code:
class A
{
      private A item;
   
      public A give_item()
      {
          return item;
      }

      public void set_item(A item)
      {
          this.item = item;
      }
}

class B extends A
{
     public void DoSomething()
     {   
          set_item(new B());
          ((B) give_item()).DoSomethingElse();  //<- Kann ich mir das irgendwie sparen??
     }    

     public void DoSomethingElse();
     {
         //...   
     }
}

Edit:

Die Sache ist nämlich, dass mich das öfters davon abhällt Vererbung zu nutzen. Wenn ich zum Beispiel einen binären, rekursiven Suchbaum programmiere, würde ich den gerne von einer Klasse 'Binärbaum' ableiten. Da der linke und rechte Unterbaum aber hier auch wieder Binärbume sind, müsste ich beim Programmieren des Suchbaumes ständig casten. Da ist es einfacher, wenn ich die Methoden des Binärbaumes anpasse und direkt in Suchbaum schreibe...
 

Wildcard

Top Contributor
Du könntes Generics verwenden oder passende Interfaces verwenden.
Versuch mal den echten Anwendungsfall zu beschreiben.
 

GouShou

Mitglied
Hehe, ja hatte ich mir auch überlegt. Allerdings würde das im meinem (editierten) Beispiel nicht funktionieren, da die Typisierung eigentlich schon festlegt, welche Objekte der Binärbaum enthält. Allerdings könnte ich das über Vererbung lösen und die Geschichte dann über Typisierung... Möglich wäre es - gibt es keinen anderen Weg?
Oder kann ich quasi 2mal typisieren?

IRgendwie sowas: class Test<T1,T2>? Aber das wird es nicht geben und wenn wäre es sehr unschön...
 
S

SlaterB

Gast
gehts hier nicht einfach um den Fall einer ArrayList?

Code:
ArrayList<MyClass> m = ..;
MyClass c = m.get(i);

ist folgende Vererbung erlaubt? ;) (ich kannst grad nicht ausprobieren)


public class MyClass extends ArrayList<MyClass> {


    MyClass c = get(i);

}
 

GouShou

Mitglied
SlaterB, ich kann dir gerade überhaupt nicht folgen. Wäre schön, wenn du das erläutern könntest.

Also ich habe zum Beispiel diesen Binärbaum programmiert: (Hab nur die Methodenrümpfe stehen gelassen, da das sonst so lang wäre.)

Code:
public class BinTree<T> 
{
    private T rootItem = null;
    private BinTree leftTree = null;
    private BinTree rightTree = null;
    
    public BinTree() {}
    
    public BinTree (T pObject){}
    
    public BinTree (T pObject, BinTree pLeftTree, BinTree pRightTree){}
    
    public boolean isEmpty(){}
    
    public void clear(){}
    
    public void setRootItem (T pObject){}
  
    public T getRootItem(){}
    
    public void addTreeLeft (BinTree pTree){}
    
    public void addTreeRight (BinTree pTree){}

    public BinTree getLeftTree(){}
    
    public BinTree getRightTree(){}
}

Wie ihr seht, geben getLeftTree und getRightTree beide Objekte vom Typ BinTree zurück.

Jetzt will ich die Klasse "SearchTree" programmieren. Habe mal eine Beispielmethode geschrieben:

Code:
public class SearchTree extends BinTree
{
    //So sieht sie aus, wenn ich die Klasse von BinTree ableite:
    public void getSortedList(List list) 
    {
        if (((SearchTree)getLeftTree()) != null) ((SearchTree)getLeftTree()).getSortedList(list);
        if (getRootItem()  != null) list.add(getRootItem());
        if (((SearchTree)getRightTree()) != null) ((SearchTree)getRightTree()).getSortedList(list);                
    }
}

public class SearchTree
{
   //So würde sie aussehen, wenn ich nicht ableitete und die Methoden neu schriebe:
      public void getSortedList(List list) 
      {
        if (getLeftTree() != null) getLeftTree().getSortedList(list);
        if (getRootItem() != null) list.add(getRootItem());
        if (getRightTree() != null) getRightTree().getSortedList(list);                
     }  
}

Natürlich ist der Unterschied hier relativ gering, aber bei anderen Methoden könnte das schon entscheiden, ob Vererbung sinnvoll ist oder sie das ganze nur unübersichtlich macht, anstatt wirklich Vorteile zu bringen.
 
S

SlaterB

Gast
jo und ich meinte dann

Code:
public class BinTree<T, MyTree extends BinTree>
{

    private MyTree rightTree = null; 

    public void addTreeRight (MyTree pTree){}
 
    public MyTree getRightTree(){} 
}

public class SearchTree extends BinTree<SearchTree>
sofern möglich,

oder auch

public class SearchTree<T> extends BinTree<T, SearchTree>

was aber noch kranker aussieht ;)
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
M Designentscheidung von Attributen/Methoden im Falle von Vererbung Java Basics - Anfänger-Themen 8
W Methoden Verständnisfrage Vererbung von Methoden Java Basics - Anfänger-Themen 14
E Vererbung super-Methoden Aufruf Java Basics - Anfänger-Themen 3
A Klassen Vererbung privater Methoden und Member Java Basics - Anfänger-Themen 12
C Methoden Vererbung private Attribute/public Methoden Java Basics - Anfänger-Themen 4
S Gehaltsberechnung (Vererbung, abstrakte Methoden) Java Basics - Anfänger-Themen 6
J Vererbung Vererbung von Methoden Java Basics - Anfänger-Themen 6
H Vererbung theoretische Frage zur Vererbung/Methoden Java Basics - Anfänger-Themen 7
T Vererbung und Zugriff auf Methoden von abgeleiteten Klassen Java Basics - Anfänger-Themen 2
M Vererbung und Sichtbarkeit von Methoden Java Basics - Anfänger-Themen 7
D Vererbung von Methoden -> HILFE Java Basics - Anfänger-Themen 5
G Frage zur Vererbung und überschreiben von Methoden Java Basics - Anfänger-Themen 6
K Vererbung: Methoden mit und ohne Parameter? Java Basics - Anfänger-Themen 3
R init-methoden vererbung Java Basics - Anfänger-Themen 5
L Klassen/Methoden/Objekt/Vererbung Java Basics - Anfänger-Themen 6
frau-u Problem mit Klassen und Vererbung - benutzen von Methoden Java Basics - Anfänger-Themen 2
T Vererbung von Attributen und Methoden, Verständnisproblem Java Basics - Anfänger-Themen 4
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 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
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
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 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
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 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
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

Ähnliche Java Themen

Neue Themen


Oben