interface [B]Ordnung[/B] {
public abstract boolean [B]kleiner[/B]( Object e ).
}
Es soll true zurückgegeben werden, wenn das Objekt, auf dem der Aufruf erfolgt, kleiner ist, als das Objekt, das beim Aufruf übergeben wird – ansonsten false.
Schreiben Sie eine Klasse Zahl mit einem Attribut namens wert vom Typ int, die dieses Interface korrekt implementiert.
Ich verstehe nicht ganz: Soll ich eine Klasse schreiben, die einen Wert bekommt und die dann einen Aufruf auf eine Zahl machen soll? Oder wie soll man das umsetzen?
Ein Attribut ist ein Datentyp, das in der Klasse an sich definiert wird.
Java:
publicclassMyClass{privateint myAttrib;}
Das Object, dass du in der Methode kleiner bekommst, muss erstamal gecastet werden. (Vorher prüfen, ob es ein Ordnungsobject ist).
Da dein Interface keine getWert() Methode hergibt, muss du dann schauen, ob es ein 'Zahl'-Object ist. Die Zahl-Methode braucht eine getWert-Methode sähe so aus:
Java:
publicclassZahlextendsOrdnung{privateint wert;publicintgetWert(){return wert;}publicvoidsetWert(int wert){this.wert = wert;}publicbooleankleiner(Object o){if(!o instanceofOrdnung)returnfalse;if(!o instanceofZahl)returnfalse;Zahl z =(Zahl) o;//Das musst du jetzt aber selber machen}}
EDIT: Falls du dich fragst wofür "if(!o instanceof Ordnung)" das ist für den Fall, dass eine Universal Methode in getWert() o.ä. in deine Abstrakte-Klasse kommt.
Vielen Dank für die Antwort! Noch eine Frage: bedeutet "Object" im Konstruktor dass z.B. kein String sondern eine erzeugte Instanz eines Objektes übergeben wird?
Edit: String ist ein Objekt
Ich würde auch einen primitiven Datentypen als Object ansehen.
In java gibt es auch die Klasse Integer oder String die sich wie Objekte verhalten.
Ich meine String ist sogar ein Object.
Für mich hieße diese Ausage nur, dass ein Object/Datentyp im Konstruktur instanziert wird.
Egal welcher Datentyp/welches Object.
Java:
publicclassZahlextendsOrdnung{privateint wert;privateInteger wertObject;publicZahl(int wert){this.wert = wert;//Kein wirklichs Object (Würde mir reichen und würde sagen könnte auch gemeint sein)this.wertObject =newInteger(wert);//Auf jeden fall eins (Das ist zu 100% mit der Aussage gemeint)}//Weitere Methoden}
Aber ich gehe auch stark davon aus, dass sich da die Geister scheiden werden..
Ich glaube aber 'sauberer' wäre es, wenn man die primitiven Datentypen als kein Object ansieht. Aber ich für mich würde es wie gesagt anders sehen.
Noch eine Frage: Kann man deine ersten drei Blöcke nicht einfach sparen indem man einen Konstruktor für Zahl implementiert? Oder hat das einen Sinn das die Zahl private ist? Weil verändert werden kann sie ja durch die getter und setter sowieso.
Edit: Grad 2. Beitrag bemerkt
Natürlich kann man die Zahl auf public setzten Getter und Setter rausschmeißen und den Konstrukor dafür verwenden.
Allerdings zieht das auch Nachteile mit sich sich.
Ich halte es für sauberer mit Getter und Setter zu arbeiten, auch in Hinsicht der Datenkapselung, wenn du dich da mehr für intressierst kann ich dir folgenden Artikel empfehlen.
Sehr guter Artikel, Danke dafür. Das ist jedoch eine Klausuraufgabe daher würde ich auf die getter und setter verzichten (Zum Teil weil auf Papier der Code dadurch größer wird)
Kann jeder machen, wie er mag.
Ich habe in meinem Klausuren immer mit Getter und Setter gearbeitet.
Aber ist auch geschmsckssache
Dann wünsche ich dir mal viel Erfolg für die bevorstehende Klausur!