Vererbung |
28.02.2015, 12:44 | Auf diesen Beitrag antworten » | |||||||||||||||
javaneu | Vererbung Meine Frage: Hallo ich habe gerade bei dieser Aufgabe probleme: In dieser Aufgabe sollen Sie mathematische Ausdrücke objektorientiert modellieren und dabei die Eigenschaften der Vererbung ausnutzen. a) Erstellen Sie dazu zunächst ein Interface Term, dass nur die Methode public int getValue() enthält. b) Schreiben Sie eine Klasse AbsoluteTerm, die Term implementiert. Jedes Objekt dieser Klasse soll einen (unveränderlichen) int-Wert speichern, der dem Konstruktor als Parameter übergeben wird. Die Methode getValue() der Klasse soll diesen Wert zurückgeben. c) Schreiben Sie als Nächstes die abstrakte Klasse BinaryOperation, die ebenfalls das Interface Term implementiert. Schreiben Sie die Methoden public Term getLeft() und public Term getRight(), die den linken bzw. rechten im Konstruktor festgelegten Operanden der Operation zurückgeben. Die Methode getValue() schreiben Sie hier nicht ? warum geht das? d) Erstellen Sie die Klasse Addition als Unterklasse von BinaryOperation und implementieren Sie nun die Methode getValue() so, dass diese die arithmetische Summe der beiden Operanden berechnet und zurückgibt. Vergessen Sie den Konstruktor der Klasse nicht. e) Implementieren Sie die Klasse Factorial, die die Fakultät eines anderen Ausdrucks berechnet. Überlegen Sie sich, was eine geeignete Oberklasse bzw. -interface sein könnte. f) Überlegen Sie sich weitere mathematische Operationen und implementieren Sie diese, wie z.B. die Exponentiation: ab. Ggf. müssen Sie Klassen weiterer Grundrechenarten erstellen. Zur Erinnerung: Fakultät von n ist definiert als: n! = 1 2 3 . . . n Meine Ideen: Interface
class Habe es so versucht
|
|||||||||||||||
|
||||||||||||||||
28.02.2015, 12:55 | Auf diesen Beitrag antworten » | |||||||||||||||
eulerscheZahl | So soll der Konstruktor sein:
|
|||||||||||||||
28.02.2015, 13:21 | Auf diesen Beitrag antworten » | |||||||||||||||
javaneu |
Mir wird nur hier ein Fehler angezeigt: public class AbsoluteTerm implements Term Absolute term is not abstract and does not override abstract method getValue |
|||||||||||||||
28.02.2015, 15:03 | Auf diesen Beitrag antworten » | |||||||||||||||
Karlito | Hallo, getValue() darf nicht static sein. Methoden und Felder sind nur als static zu kennzeichnen, wenn man sie ohne ein Objekt zu erzeugen aufrufen will. Hier ein Beispiel zur Funktionsweise von static:
Gruß, Karlito |
|||||||||||||||
Anzeige | ||||||||||||||||
|
||||||||||||||||
28.02.2015, 16:46 | Auf diesen Beitrag antworten » | |||||||||||||||
javaneu |
Die Fehlermeldung bleibt trotzdem ? |
|||||||||||||||
28.02.2015, 16:59 | Auf diesen Beitrag antworten » | |||||||||||||||
Karlito | Ja, weil der Rückgabetyp nicht stimmt. Im Interface soll getValue() int zurückgeben. In der Klasse gibst du void (also nichts) zurück. Die Rückgabetypen müssen übereinstimmen. Im Prinzip kann man den Funktionskopf aus dem Interface kopieren. Sorry, dass ich das vorhin übersehen habe. Edit: Weiterhin fällt mir gerade auf, dass es kein Feld value gibt. Deswegen solltest Du gleich noch mehr Fehler bekommen, weil this.vaiue nicht existiert. Gruß, Karlito |
|||||||||||||||
28.02.2015, 17:05 | Auf diesen Beitrag antworten » | |||||||||||||||
javaneu |
Aber wie soll ich sonst was zurückgeben ,wenn nicht mit value? |
|||||||||||||||
28.02.2015, 17:53 | Auf diesen Beitrag antworten » | |||||||||||||||
Karlito | Wie gesagt, es fehtl ein entpreichendes Feld in der Klasse:
Diese Felder werden im Normalfall immer als private gekennzeichnet um dem Geheimnisprinzip gerecht zu werden. Gruß, Karlito |
|||||||||||||||
28.02.2015, 18:34 | Auf diesen Beitrag antworten » | |||||||||||||||
javaneu | public class AbsoluteTerm implements Term { private int value; //dieses (private) Feld fehlt... AbsoluteTerm(int value) { this.value = value; //hier kommt noch was } Ich komme gerade nicht darauf , was ich noch hinzufügen kann? |
|||||||||||||||
28.02.2015, 18:41 | Auf diesen Beitrag antworten » | |||||||||||||||
eulerscheZahl | Der Beitrag eins über dir sieht doch gut aus. Ich habe es jetzt nicht extra in eclipse kopiert, behaupte aber, da fehlt nichts mehr. |
|||||||||||||||
28.02.2015, 18:58 | Auf diesen Beitrag antworten » | |||||||||||||||
Karlito | Zeile 3 war das was gefehlt hatte. Ich habe es hinzugefügt. Gruß, Karlito |
|||||||||||||||
28.02.2015, 19:13 | Auf diesen Beitrag antworten » | |||||||||||||||
javaneu |
|
|||||||||||||||
28.02.2015, 19:14 | Auf diesen Beitrag antworten » | |||||||||||||||
eulerscheZahl | So weit waren wir doch schon! private int value; //dieses (private) Feld fehlt... |
|||||||||||||||
28.02.2015, 19:15 | Auf diesen Beitrag antworten » | |||||||||||||||
Karlito | Schau dir meinen Code an und deinen und ziehe deine Schlüsse... |
|||||||||||||||
28.02.2015, 19:32 | Auf diesen Beitrag antworten » | |||||||||||||||
javaneu |
Immer noch Fehler anzeige .class expected. Tut mir leid wenn ich euch ein wenig nerve . Programmieren ist kompletttes neuland für mich im moment. |
|||||||||||||||
28.02.2015, 19:50 | Auf diesen Beitrag antworten » | |||||||||||||||
eulerscheZahl | Kontrolliere mal die Klammersetzung. |
|||||||||||||||
28.02.2015, 20:07 | Auf diesen Beitrag antworten » | |||||||||||||||
javaneu | Blöder Fehler .
Irgendwas stimmt hier wieder nicht . Ich muss doch left und right als private definieren oder ? |
|||||||||||||||
28.02.2015, 20:12 | Auf diesen Beitrag antworten » | |||||||||||||||
eulerscheZahl | wenn Left und Right (nach Konvention eigentlich klein geschrieben) vom Typ int sind, musst du auch ein int zurückgeben. Ich kenne BlueJ nicht, aber eclipse hilft dir auch bei gettern, kannst es ja mit BlueJ auch testen: Lösche die Funktionen getLeft und getRight komplett. Tippe dann get und drücke Strg+Leertaste. In eclipse (ebenso NetBeans) kommt da ein Menü, das dir getLeft anbietet. Wenn du das auswählst, wird der Code ergänzt. |
|||||||||||||||
28.02.2015, 20:19 | Auf diesen Beitrag antworten » | |||||||||||||||
javaneu |
Funktioniert immer noch nicht ? |
|||||||||||||||
28.02.2015, 20:20 | Auf diesen Beitrag antworten » | |||||||||||||||
eulerscheZahl | Du hast doch nur die Groß-/Kleinschreibung geändert. public int getLeft() |
|||||||||||||||
28.02.2015, 20:20 | Auf diesen Beitrag antworten » | |||||||||||||||
javaneu |
Fehler identifier expected markierung bei term |
|||||||||||||||
28.02.2015, 20:22 | Auf diesen Beitrag antworten » | |||||||||||||||
eulerscheZahl | Term hat an der Stelle ja auch nichts verloren. |
|||||||||||||||
28.02.2015, 20:29 | Auf diesen Beitrag antworten » | |||||||||||||||
Karlito | RE: Vererbung
Sorry euler, aber Term muss sogar der Rückgabetyp sein. Fehlerhaft ist der Type der privaten Felder. Außerdem fehlt noch der Konstruktor. Gruß, Karlito |
|||||||||||||||
28.02.2015, 20:30 | Auf diesen Beitrag antworten » | |||||||||||||||
javaneu | public abstract class BinaryOperation implements Term Hier auch ein fEHLER: Es wird gesagt BinaryOperation is public . Should be declared in a file named Binary Operation. Darf man das so nicht lassen? |
|||||||||||||||
28.02.2015, 20:33 | Auf diesen Beitrag antworten » | |||||||||||||||
eulerscheZahl | Steht doch alles da, du hast die Datei anders benannt, als die Klasse. BinaryOperation gehört in die Datei BinaryOperation.java |
|||||||||||||||
28.02.2015, 20:47 | Auf diesen Beitrag antworten » | |||||||||||||||
javaneu | d) Erstellen Sie die Klasse Addition als Unterklasse von BinaryOperation und implementieren Sie nun die Methode getValue() so, dass diese die arithmetische Summe der beiden Operanden berechnet und zurückgibt. Vergessen Sie den Konstruktor der Klasse nicht. Wie erstellt man genau eine Unterklasse bei java? |
|||||||||||||||
28.02.2015, 20:53 | Auf diesen Beitrag antworten » | |||||||||||||||
eulerscheZahl |
Den Konstruktor solltest du bei BinaryOperation auch noch ergänzen. Ist zwar abstract, aber irgendwo musst du right und left ja zuweisen. |
|||||||||||||||
28.02.2015, 21:08 | Auf diesen Beitrag antworten » | |||||||||||||||
javaneu | public class Addition extends BinaryOperation{ private int value; AbsoluteTerm(int value) { this.value = value; //hier kommt noch was } public int getValue(){ return this.value; } } Ich weiss das ich noch implementieren muss die get methode. Aber blue j meckert schon . invalid method ,return type required Ich verliere die geduld |
|||||||||||||||
01.03.2015, 06:54 | Auf diesen Beitrag antworten » | |||||||||||||||
eulerscheZahl | Um das Ganze abzukürzen:
Addition braucht einen Konstruktor, der die Werte für rechts und links entgegennimmt. Diese werden dann an den Konstruktor der Basisklasse übergeben (super(left, right)). Ein Member value brauchst du nicht zwingend. Natürlich könntest du die Addition auch einmal im Konstruktor durchführen, statt jedes Mal bei getValue(). |
|
Verwandte Themen
Die Beliebtesten » |
|
Die Größten » |
|
Die Neuesten » |
|