Java Verständnisfrage zu Abstrakten Methoden

HelloSpencer

Ensign
Registriert
März 2011
Beiträge
137
Hallo,
ich habe eine Verständnisfrage zu abstrakten Methoden unter Java.

Ich hab letztens die Schreibweise für eine abstrakte carsCalculator Methode gefunden (Pseudocode) .

calculateNumberCars(Beispiel cars)

Diese Methode soll die Anzahl der Autos zurückgeben. Ich versteh nicht was das für eine Schreibweise ist und wie ich diese zu interpretieren habe.
Desweiteren verstehe ich nicht, wie ich hier Autoanzahl zurückgeben soll, da abstrakte Methoden doch void sind ?

Wäre nett, wenn mir das jemand mal beleuchten könnte.
 
Abstrakte methoden müssen nicht void sein, sondern können genau so gut von jedem anderen Typ sein.

Zudem steht bei deiner "Pseudocode Schreibweise", welche sehr ungünstig gewählt ist, wenn man eine Verständnisfrage zu Code hat, sollte man Code posten nicht, etwas "ähnliches".

Vielleicht hats im cars Object vom Typ Beispiel ja ein counter drin oder sowas... das kann niemand wissen. Oder es ist nicht void in dem Fall könnte es auch ein int zurückgeben...

Kann man so wie es da steht nicht beurteilen
 
Es gibt leider keinen zusammenhängenden Code dazu. Da verlang ist, das man die Anzahl der Autos mittels einer Abstrakten Klasse und Abstrakten Methode nach dem obigen Konstrukt zurückgibt. Ich weiß leider nicht wie.
 
Hi,

bitte korrigiert mich wenn ich mich täusche, aber das ist nicht möglich, da abstrakte Methoden keine Implementierung haben sondern nur die Deklaration. Sprich der eigentliche Inhalt wird erst in der Methode der abgeleiteten Klasse definiert.

VG,
Mad
 
Deadmanshand schrieb:
Es gibt leider keinen zusammenhängenden Code dazu. Da verlang ist, das man die Anzahl der Autos mittels einer Abstrakten Klasse und Abstrakten Methode nach dem obigen Konstrukt zurückgibt. Ich weiß leider nicht wie.

Man könnte in der konkreten Methode eine Klassenvariable setzen, wenn die Methode partout void als Rückgabewert haben soll. Oder die Klasse "Beispiel" hat ein entsprechendes Feld, das man setzen kann.

Aber mir ist nicht klar, welches Problem Du hast, von dem Pseudocode eine konkrete Java-Implementiertung abzuleiten. Dort ist schließlich nichts über den Rückgabewert vorgegeben.

PHP:
public abstract class Whatever {
    public abstract int calculateNumberCars(Beispiel cars);
}
 
Madman1209 schrieb:
Hi,

bitte korrigiert mich wenn ich mich täusche, aber das ist nicht möglich, da abstrakte Methoden keine Implementierung haben sondern nur die Deklaration. Sprich der eigentliche Inhalt wird erst in der Methode der abgeleiteten Klasse definiert.

VG,
Mad

Genau das verwirrt mich auch!

Da man hier ja keine konkretre Aufgaben posten darf, da es sonst als Hausaufgabenhilfe oder ähnliches interpretiert werden könnte, wollte ich die Aufgabe nicht direkt stellen. Es handelt sich aber konkret um eine Übung, zur Verständnis Abstrakter Methoden und Klasse. Daher werde ich es hier ausnahmsweise posten.

Schreibe eine abstrakte Klasse CarCalulator, mit der abstrakten
Methode calculateNumberCars(Autoklasse cars),
die die Anzahl der cars zurückgibt, die in eine Garage passen.


Es sei gesagt das die Klasse "Autoklasse" die Superklasse ist.
 
Deadmanshand schrieb:
Da man hier ja keine konkretre Aufgaben posten darf, da es sonst als Hausaufgabenhilfe oder ähnliches interpretiert werden könnte, wollte ich die Aufgabe nicht direkt stellen. Es handelt sich aber konkret um eine Übung, zur Verständnis Abstrakter Methoden und Klasse. Daher werde ich es hier ausnahmsweise posten.
Schreibe eine abstrakte Klasse CarCalulator, mit der abstrakten
Methode calculateNumberCars(Autoklasse cars),
die die Anzahl der cars zurückgibt, die in eine Garage passen.


Es sei gesagt das die Klasse "Autoklasse" die Superklasse ist.

Losgelöst ist die Aufgabe zwar etwas abstrakt, aber die Aufgabenstellung an sich ist doch eindeutig und leicht zu lösen. Du sollst keine Implementierung schreiben, sondern lediglich die abstrakte Klasse mit einer abstrakten Methode. Als was die Methode die Anzahl der Cars zurück gibt, darfst Du Dir aussuchen. Muss nicht zwingend ein int sein.
 
soares schrieb:
Losgelöst ist die Aufgabe zwar etwas abstrakt, aber die Aufgabenstellung an sich ist doch eindeutig und leicht zu lösen. Du sollst keine Implementierung schreiben, sondern lediglich die abstrakte Klasse mit einer abstrakten Methode. Als was die Methode die Anzahl der Cars zurück gibt, darfst Du Dir aussuchen. Muss nicht zwingend ein int sein.

Also wäre das dann nur folgendes ?

Code:
public abstract class CarCalculator {

public abstract int calculateNumberCars(Autoklasse cars);

}

Steckt da schon das return mit drinnen oder muss man das noch seperat definieren ? Das ist das was ich nicht verstehe :)
 
Deadmanshand schrieb:
Steckt da schon das return mit drinnen oder muss man das noch seperat definieren ? Das ist das was ich nicht verstehe :)

Dann solltest Du vielleicht einfach erarbeiten, was abstrakte Methoden sind und wofür man diese verwendet ;)
 
Du musst nu ne Unterklasse erzeugen meinetwegen:

Code:
public class Bla extends  CarCalculator {
     
     @Override
     public int calculateNumberCars() {
               //Methodenlogik hier, zb. Rückgabe der Anzahl Autos
               return int bla;
     }
}
 
Zuletzt bearbeitet:
Hi,

Du musst nu ne Unterklasse erzeugen

Wieso muss er das? Wo ist das in seiner Aufgabenstellung gefordert?

Schreibe eine abstrakte Klasse CarCalulator, mit der abstrakten Methode calculateNumberCars(Autoklasse cars), die die Anzahl der cars zurückgibt, die in eine Garage passen.

Ich sehe da nirgends, dass eine Ableitung und eine konkrete Implementierung gefordert sind. In meinen Augen ist die Aufgabenstellung schlicht ungenau. Entweder, es sind die abstrakten Klassen und Methoden gefordert oder es soll von diesen eine konkrete Implementierung geschrieben werden. Ich für meinen Teil würde nochmal nachfragen, was denn genau die Aufgabe ist.

So wie sie gestellt ist ist sie in meinen Augen nicht umsetzbar, da eine abstrakte Klasse mit einer abstrakten Methode zwar natürlich geschrieben werden kann, diese dann aber eben nicht die konkrete Implementierung beinhaltet. Die abstrakte Methode "calculateNumberCars" wird nie etwas zurückliefern - die implementierung in der abgeleiteten Klasse schon.

VG,
Mad
 
Madman1209 schrieb:
Ich sehe da nirgends, dass eine Ableitung und eine konkrete Implementierung gefordert sind. In meinen Augen ist die Aufgabenstellung schlicht ungenau. Entweder, es sind die abstrakten Klassen und Methoden gefordert oder...

Warum oder? Und warum ungenau? Die Aufgabenstellung fordert eine abstrakte Klasse mit einer abstrakten Methode. Den tieferen Sinn dahinter sehe ich abseits davon, dass man herausfindet, dass es abstrakte Klassen und Methoden gibt nicht, aber vielleicht dient das als Vorbereitung für spätere Übungen.

Mir erscheint die Aufgabe jedenfalls korrekt gestellt und beantwortbar.
 
Hi,

Die Aufgabenstellung fordert eine abstrakte Klasse mit einer abstrakten Methode.

nein, sie fordert eine abstrakte Klasse mit einer abstrakten Methode, die eine konkrete Implementierung beinhaltet - nämlich etwas zurück zu liefern!

Schreibe eine abstrakte Klasse CarCalulator, mit der abstrakten Methode calculateNumberCars(Autoklasse cars), die die Anzahl der cars zurückgibt, die in eine Garage passen.

und das widerspricht in meinen Augen jeder Definition einer abstrakten Methode, die ja eben genau nichts zurückliefern und beinhalten soll! In meinen Augen unvollständig oder unkorrekt gestellte Aufgabe.

VG,
Mad
 
Madman1209 schrieb:
nein, sie fordert eine abstrakte Klasse mit einer abstrakten Methode, die eine konkrete Implementierung beinhaltet - nämlich etwas zurück zu liefern!

und das widerspricht in meinen Augen jeder Definition einer abstrakten Methode, die ja eben genau nichts zurückliefern und beinhalten soll! In meinen Augen unvollständig oder unkorrekt gestellte Aufgabe.

Eine abstrakte Methode kann natürlich keinen konkreten Wert zurück liefern, ist ja nur ein Muster, insofern mag man sich hier an sprachlichen Unzulänglichkeiten aufhängen.

Da aber nun mal eine abstrakte Methode gefordert ist, gehe ich (vielleicht irrig) davon aus, dass mit "liefern" der Rückgabewert gemeint ist. Der (Basis)Typ wird ja in der abstrakten Methode festgelegt.

Um sicher zu sein, soll der TE halt beim Tutor nachfragen. Es wäre nett, die Auflösung des Rätsels dann hier zu posten :)
 
Ja ich kann jedoch erst frühsten nächste Woche fragen, jedoch erhoff ich mir bei dem Tutor/Prof. nicht all zu viel...
Er wollte nicht mal die Kurzlösungen zur Verfügung stellen. Und ist auch meistens sehr genervt wenn man Fragen hat.
Aber so wie ich es denke, da es eine Kurzaufgabe ist, die man in 2 Minuten lösen soll, kann ja nicht all zu viel verlangt sein.
 
Den Krieg mit ungenauen Aufgaben hatten wir auch, war das größte Problem in den Programmier Modulen.
Spricht man es an ist es nur ein Feature, man soll es halt so machen wie man es versteht :o

Abstrakte Methoden jedenfalls haben keinen Rumpf, d.h. auch keinen Code.
Was die meint ist sicherlich das Überschreiben einer abstrakten Methode....
 
Zuletzt bearbeitet:
Zurück
Oben