Java: Klasse "Überladen"
Okay, also sagen wir mal ich habe eine class-Datei namens Orange und zwei separate class-Dateien aufgerufen, Farbe und Frucht.
Innen Orange, es gibt einige Eigenschaften für Farbe, Größe, Reifegrad etc. und die Methode setSize(int size).
Innen Frucht, gibt es einige Eigenschaften geben Sie bei name der Frucht, ob Sie Samen hat, wo es importiert wurde etc. und dann werden die Methoden setName(String name), Essen(), waschen() und geben(Person, person).
Innerhalb der Farbe gibt es einige Eigenschaften, die für die Namen, die RGB-Werte, Hex-Werte, Alpha-Werte etc. und dann werden die Methoden setName(), setAlpha(int alpha), setRGB(int r, int g, int b) und setHex(int hex).
Meisten der oben genannten Informationen, die irrelevant ist, und allein da, um Ihnen helfen, zu verstehen.
Der Orange-Klasse-Datei ist ein Objekt namens "Eltern". Was ich wissen muss ist, ist es möglich für das Objekt "Parent" gesetzt werden, um entweder eine Frucht oder Farbe? Später in der main-Klasse Datei, es kommt ein Punkt, wo myOrange.Eltern.setName("Bob") passiert, und in beiden Fällen (ob Mutter-oder Obst oder eine Farbe) wäre es möglich, da die Frucht hat eine Methode namens setName, und die Farbe tut so gut.
Dank
Haben Sie versucht, dies zu schreiben, in Java, und kompilieren? Welchen Typ sollte der Elternteil Mitglied sein, so dass Sie zuordnen können entweder einen Obst-Instanz oder eine Color-Instanz zu?
also, was passiert, wenn eine orange (Frucht) hat eine orange Farbe?
InformationsquelleAutor Blackvein | 2012-02-16
Du musst angemeldet sein, um einen Kommentar abzugeben.
Typ-Vererbung ("Klasse überladen"?) stellt eine "ist-ein" - Beziehung.
Die Orange ist eine Frucht. Keine zusätzliche Variablen benötigt werden; geerbt-Mitglieder sind aufgerufen über
this
.Zusammensetzung stellt eine "hat-ein" - Beziehung.
Die Orange ist eine Farbe. Eine getrennte variable deklariert, wenn Sie dieses Muster verwenden, so ist dies klar ist, was verwendet wird für
Parent
.Damit
Parent
(eine schrecklich benannte variable) eine Instanz von Farbe.InformationsquelleAutor Joe Coder
Es hängt wirklich davon ab, Ihren Fall. Wenn die "Orange" - Klasse repräsentiert die Farbe orange, dann ist es sinnvoll, es zu Erben, aus der "Color" - Klasse. Wenn es ist die Frucht, dann könnte es Sinn machen, zu Erben von der "Frucht" - Klasse.
Jedoch in keinem Fall (zumindest mit den gegebenen Informationen) sehe ich einen Grund für die "Orange" - Klasse haben einen "Parent" - Referenz. Es würde mehr Sinn machen (wieder abhängig von Ihren use-case) für Ihren "Orange" - Klasse zu erweitern, entweder in Farbe oder Frucht, wie ich schon sagte.
InformationsquelleAutor mWillis
Wenn Sie von "
parent
" du meinst "inherits from
" dann ist die Antwort: Nein.Orange
können Erben vonFruit
aber nicht ausColor
. Vererbung muss eine "ist-ein" - Beziehung.Einer
Orange
"ist-ein"Fruit
, das ist richtig.Einer
Orange
"ist-ein"Color
mmmm, klingt nicht Recht.InformationsquelleAutor GETah
Was möchten Sie vielleicht zu tun ist, stellen Sie Farbe und Orange implementieren eine Schnittstelle namens entweder "NameHolder" (wenn Sie wollen zu setzen eine getter-und eine setter) oder "NameSetter" (wenn Sie nur wollen, setzen Sie den setter).
Wie diese (ich verwende NameHolder als seine der häufigste Fall):
In diesem Mode, Orange und halten Ihre "Eltern" - Objekt nicht als ein Objekt (das hat sehr wenig Verhalten), sondern als eine Instanz einer NameHolder. Dies macht die Linie, die Sie haben darauf hingewiesen:
Diese Linie wird kompiliert ohne Fehler (natürlich wird er das Ergebnis in eine NullPointerException zur Laufzeit, wenn Parent null ist). Ich sollte auch darauf hinweisen, dass Java-coding-guidelines empfehlen, dass Felder, die in Kleinbuchstaben geschrieben sein, so sollte es sein, per Konvention:
InformationsquelleAutor MetroidFan2002
In einem statisch typisierten Sprache wie Java Sie nicht Aufruf einer Methode auf eine variable, es sei denn, der Typ der Variablen deklariert genannten Methode. Der Typ der Variablen schränkt Ihren Zugriff auf die Objekte, die die variable Punkte; es ist wie ein Fenster, das können Sie sehen, nur ein Teil des dahinter liegenden Objekts.
Diese unterscheidet sich von dynamisch typisierten Sprachen; Typ der variable nicht einschränken, den Zugriff auf das Objekt. Solange das Objekt hat die Methode, die Sie anrufen, du bist gut zu gehen.
So, in Java müssen Sie:
setName
Methode. Der flexibelste Weg, um dies zu tun ist durch die Schaffung einerinterface
. Dannimplement
", dass das interface in den Klassen, die tatsächlich einesetName
Methode, undparent
.Beispiel:
InformationsquelleAutor Joni
Wenn Orange wirklich ein Elternteil hat, der über Vererbung, es sollte schon haben Sie Zugriff auf Ihre member-Funktionen. Es klingt wie Sie versuchen, Orange Vererbung von Farbe und Frucht zur gleichen Zeit durch einen workaround, da in Java Mehrfachvererbung nicht unterstützt. Dies ist wahrscheinlich nicht das, was Sie wirklich wollen, zu tun. Ihre beste Wette ist, um eine richtige Beziehung, die bereits angedeutet wurde.
In dieser Art und Weise, die Orange ist eine Frucht und hat eine Farbe. Wenn Sie möchten, dass Orange die Möglichkeit haben, entweder eine Frucht ODER eine Farbe, die Sie brauchen, um zu überdenken, was Sie wollen. Es ist immer möglich, eine Frucht mit name="Orange" und eine Farbe, die mit Namen="Orange", ohne tatsächlich macht Sie die gleiche Klasse.
InformationsquelleAutor Thomas
Wenn Sie wollen, um ihn zu Programmieren so dass Sie überprüfen könnten, bevor die Ausführung einer Methode zu sehen, wenn "Parent" verweist auf ein Beispiel von Obst oder Farbe, und führen Sie dann die entsprechende Methode aufrufen.
InformationsquelleAutor Martin