Wann Methode abstract?

  • Themenstarter sehrVerzweifelterStudent
  • Beginndatum
S

sehrVerzweifelterStudent

Mitglied
Hallo zusammen,
es ist mir auch nach längerer Internet-Recherche nicht ganz klar, wann eine Methode abstrakt sein soll..
1) Kann man generell sagen, dass jede Methode ohne Body abstract ist?
2) Wie sieht es bei Interfaces aus?
3) Hat man eine abstract Methode in einer Klasse, sollte man dann auch die Klasse abstract machen? Falls ja, bei Interfaces auch?
4) Wenn eine Methode static ist, kann sie nicht abstract sein, und andersrum oder? Weil ich soll z.B. in einem Interface X eine Klassenmethode m2() schreiben, ohne Parameter, welches double zurückliefert. Also dachte ich mir erst static double m2(); aber da die Methode ja keinen Body hat muss sei abstract sein? Und somit nicht static, aber es ist doch eine KLASSENmethode gefordert...

LG!
P.S. So generelle Sachen, wie z.B. eine Klasse "Tier", welche Erben "Hund", "Kuh" etc hat, sodass "Tier" abstrakt sein soll, hab ich verstanden. Aber ich muss in der Klausur mit Klassen-/ Interfacenamen "X", "Y" etc. arbeiten, sodass man sich das nicht so einfach herleiten kann..
 
L

LimDul

Top Contributor
Die technischen Rahmenbedingungen
* Wenn eine Methode abstrakt ist, darf sie keine Body haben
* Wenn eine Methode nicht abstrakt ist, muss sie einen Body haben
* In einem Interface sind quasi alle Methoden (außer die mit default implementierungen) abstrakt - da muss man das nicht mehr angeben
* Wenn eine Klasse mindestens eine Abstrakte Methode hat, muss die Klasse abstrakt sein
* Von abstrakten Klassen, kann man keine Objekte erzeugen.

Das sind die technischen Rahmenbedingungen. Fachlich gilt:
* Eine Methode ist abstrakt, wenn man in der Schnittstelle der Klasse eine Funktionalität X bereitstellen will, aber keine Implementierung angeben kann oder will. Die Implementierung muss dann in den Ableitungen gemacht werden.
 
temi

temi

Top Contributor
Eine Klasse muss abstrakt sein, sobald man eine abstrakte Methode hat.
Eine Klasse sollte abstrakt sein, wenn man nicht möchte, dass sie direkt instantiierbar ist (siehe dein Beispiel "Tier").
Eine Methode sollte abstrakt sein, wenn man erreichen möchte, dass der Nutzer der Klasse diese Methode selbst implementieren muss.

Die Gründe für die beiden letzteren Punkte können vielfältig sein. Vielleicht fällt mir noch ein gutes Beispiel ein.
 
W

White_Fox

Top Contributor
Mal ein Beispiel für deine Klasse Tier:

Nehmen wir an, jedes Tier soll eine Methode implementieren um Stoffwechselabfallprodukte loszuwerden. Du ergänzt also die Klasse Tier um eine Methode kacken();. Diese Methode soll jetzt zwar für jedes Tier vorhanden sein, daher muß sie in Tier irgendwie deklariert werden. Aber:
  • Ein Hund läßt seinen Haufen da wo er ihn fallenläßt und schert sich nicht mehr drum
  • Eine Katze gräbt erst ein Loch, erledigt ihr Geschäft, schart es danach zu und prüft anschließend sogar, ob es noch unangenehm riecht.
  • Ein Vogel prüft vor dem Abwuf im Flug ob er noch etwas damit treffen kann...
Also wird die Methode kacken() für jedes Tier anders implementiert werden müssen. Dann kannst du die Methode kacken() als abstrakt markieren, dann mußt sich jeder, der eine Klasse von Tier ableitet, selber um die Implementierung kümmern. Aber du kannst trotzdem sicher sein, daß jedes Tier diese Methode anbietet.
 
S

sehrVerzweifelterStudent

Mitglied
Danke schonmal, das hat einiges an Klarheit gebracht :)
Hier jetzt mal eine konkrete Aufgabe:

Schreiben Sie ein public-Interface X, das eine Objektmethode m1 mit Rückgabetyp java.lang.Exception hat, wobei m1 einen double-Parameter n und einen String-Parameter str hat.
Schreiben Sie ein public-InterfaceY, das von X erbt und zusätzlich eine Klassenmethode m2 ohne Parameter hat, die double zurückliefert.
Schreiben Sie eine public-Klasse XY, die X und Methode m1 implementiert. Konkret soll Methode m1 eine Referenz auf ein Objekt vom Typ NullPointerException zurückliefern, das mit Konstruktor ohne Parameter eingerichtet wird. Klasse XY soll ein public-Attribut p vom Typ char haben sowie einen public-Konstruktor ohne Parameter. Der Konstruktor soll p auf den Wert 42 setzen. Weiter soll XY eine protected-Objektmethode m3 mit Ruckgabe true oder false und Parameter xy vom Typ XY haben, aber nicht implementieren.

Hierzu meine Lösung:

//(In der Musterlösung ist weder das Interface, noch m1() abstract, warum?)
public abstract Interface X{
public abstract Exception m1(double n, String str);
}

//(In der Musterlösung ist weder das Interface, noch m2() abstract, warum?)
public Interface Y extends X{
abstract double m2();
}

//(Gleich wie in der Musterlösung, hier plötzlich dann doch abstract.)
abstract public class XY implements X{
public char p;
public XY(){
p=42;
}
Public Exception m1(double n, String str){
return new NullPointerException();
}
abstract protected boolean m3(XY xy);

}
 
W

White_Fox

Top Contributor
//(In der Musterlösung ist weder das Interface, noch m1() abstract, warum?)
//(In der Musterlösung ist weder das Interface, noch m2() abstract, warum?)
Ein Interface ist eine rein abstrakte Angelegenheit, du kannst ein Interface nicht instanzieren. Manche gehen soweit daß sie Interface und abstrakte Klasse gleichsetzen (was meiner Meinung nach aber Quatsch ist).
Deswegen wird in einem Interface nichts mehr als abstrakt deklariert: weil das eh klar ist.
 
temi

temi

Top Contributor
In der Praxis wird man sehr oft Kombinationen aus Interfaces, abstrakten und nicht abstrakten Klassen begegnen. Das Interface legt dabei in der Regel fest, welche Methoden vorhanden sein müssen. In abstrakten Klassen werden gemeinsame Teile implementiert und dann von weiteren Klassen weiter spezifiziert. Schau dir dazu gerne mal die Klassen von Java an, z.B. ArrayList

Deren Vererbungshistorie sieht folgendermaßen aus:

java.lang.Object
java.util.AbstractCollection<E>
java.util.AbstractList<E>
java.util.ArrayList<E>

Und folgende Interfaces werden implementiert:

Serializable, Cloneable, Iterable<E>, Collection<E>, List<E>, RandomAccess
 
temi

temi

Top Contributor
ein public-InterfaceY, das von X erbt und zusätzlich eine Klassenmethode m2 ohne Parameter hat, die double zurückliefert.
Stolpert noch jemand hier über diese Anforderung?

Das müsste ja eine statische Methode sein, die dann allerdings auch im Interface sowohl einen Body haben als auch einen (anscheinend nicht näher definierten) konkreten Wert zurück liefern müsste.

Wie sieht denn die Musterlösung dazu aus?
 
S

sehrVerzweifelterStudent

Mitglied
Stolpert noch jemand hier über diese Anforderung?

Das müsste ja eine statische Methode sein, die dann allerdings auch im Interface sowohl einen Body haben als auch einen (anscheinend nicht näher definierten) konkreten Wert zurück liefern müsste.

Wie sieht denn die Musterlösung dazu aus?
Genau wie meine Lösung, und ja das hat mich auch verwirrt
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
M Best Practice Wann eine Methode schreiben ? Java Basics - Anfänger-Themen 14
M Wann eigene implementierte HashCode Methode zwingend erforderlich? Java Basics - Anfänger-Themen 1
T Vererbung Wann wird die Methode paint aufgerufen? Java Basics - Anfänger-Themen 4
N Wann muss eine Methode - protected sein wann public wann. Java Basics - Anfänger-Themen 5
N Wann und wie oft finalize Methode verwenden( überschreiben ) Java Basics - Anfänger-Themen 6
I Festellen wann Methode in anderer Klasse fertig ist Java Basics - Anfänger-Themen 5
C Instanzen, wann muss ich Instanzen erzeugen & wo?) Java Basics - Anfänger-Themen 23
S Wann buffer löschen? Java Basics - Anfänger-Themen 5
R Wie überprüfen wann der User online oder offline ist? Java Basics - Anfänger-Themen 5
C Polymorphie Was genau ist Polymorphie und wann genau sollte man es verwenden? Java Basics - Anfänger-Themen 9
I Wann ist Client plattformunabhängig? Java Basics - Anfänger-Themen 22
K Warum funktioniert das und wann erden die Objektmethoden nun ausgeführt? Java Basics - Anfänger-Themen 7
I Welches Event kommt wann? Java Basics - Anfänger-Themen 8
X Wann schreibt man diese Syntax zeichen { } Java Basics - Anfänger-Themen 8
O Wann nutzt man static? Java Basics - Anfänger-Themen 19
C Klassendesign / Wann Interface implementieren und wann Klassen vererben? Java Basics - Anfänger-Themen 3
S Wann existiert eine Instanz (eigene Klasse) Java Basics - Anfänger-Themen 8
M Wann PATH und wann JAVA_HOME in Windows System 7 setzen? Java Basics - Anfänger-Themen 2
M Wann final verwenden? Java Basics - Anfänger-Themen 5
M Wann eine Wrapper Klasse verwenden und wann einen primitiven Datentypen? Java Basics - Anfänger-Themen 8
D Ab wann getter und setter Java Basics - Anfänger-Themen 2
B Erkennen, wann static oder nicht? Java Basics - Anfänger-Themen 7
E wann welche Konstanten verwenden? Java Basics - Anfänger-Themen 7
P Wann Byte-Stream und wann Character-Stream? Java Basics - Anfänger-Themen 11
M Wann statische Methoden/Attribute? Java Basics - Anfänger-Themen 2
vandread Java Wildcards - Wann super wann extends? Java Basics - Anfänger-Themen 2
K Wann Vererbung und wann Interface verwenden? Java Basics - Anfänger-Themen 12
D Wann genau nutze ich ein solches Interface? Java Basics - Anfänger-Themen 3
K Wann genau brauche ich die Anweisung gleich null? Java Basics - Anfänger-Themen 10
B Wann toString() überschreiben? Java Basics - Anfänger-Themen 21
S OOP Wann Proxies und Interfaces? Java Basics - Anfänger-Themen 3
P Threads Wann läuft es parallel ab ? Java Basics - Anfänger-Themen 4
C Variablen Wann werden Instanzvariablen initalisiert? Java Basics - Anfänger-Themen 10
P Java Stream, wann welche Stream verwenden? Java Basics - Anfänger-Themen 3
T Ab wann ist es ein großes Projekt? Java Basics - Anfänger-Themen 35
N Bessere Performance durch final: wann denn überhaupt? Java Basics - Anfänger-Themen 28
D Wann genau abstrakte Klasse und wann ein Interface verwenden? Java Basics - Anfänger-Themen 4
W Wann nutze ich "import"? Java Basics - Anfänger-Themen 12
A junit test wann verwendet man "was"? Java Basics - Anfänger-Themen 4
H Wann ein Objekt der Programmklasse in main anlegen Java Basics - Anfänger-Themen 2
G Wann ist ein == Vergleich bei Gleitkommazahlen fahrlässig? Java Basics - Anfänger-Themen 8
T Wann for und wann while?? Java Basics - Anfänger-Themen 35
-horn- Wann wird alles NaN erzeugt? Java Basics - Anfänger-Themen 22
S Wann wird eine Klasse geladen? Java Basics - Anfänger-Themen 17
C this - wann verwende ich das? Java Basics - Anfänger-Themen 10
T Threads - Ab wann wirds Kritisch?! Java Basics - Anfänger-Themen 7
M Wann muss man eine Variable mit set-/get-Methoden in eine Bean schreiben? Java Basics - Anfänger-Themen 19
G field public/private wann Java Basics - Anfänger-Themen 11
GambaJo Ab wann neue Klasse erzeugen? Java Basics - Anfänger-Themen 2
G Wann Arrays, wann Collections? Java Basics - Anfänger-Themen 36
GambaJo Wann try.catch nutzen? Java Basics - Anfänger-Themen 11
B objekt wann als final deklarieren? Java Basics - Anfänger-Themen 2
Y Wann / Wozu inner class Java Basics - Anfänger-Themen 3
K StringBuilder notwendig ab wann? Java Basics - Anfänger-Themen 42
S wann static Funktionen wann nicht Java Basics - Anfänger-Themen 6
Bernasconi Programmierstil / Wann eine neue Datei? Java Basics - Anfänger-Themen 5
M wann, welche schleife Java Basics - Anfänger-Themen 3
M Ab wann ist die Datei sichtbar? Java Basics - Anfänger-Themen 3
G Herausfinden, wann mehrere Threads abgeschlossen sind Java Basics - Anfänger-Themen 3
G Überprüfen wann ein Dokument abläuft? Java Basics - Anfänger-Themen 3
N SAX, StAX, JDOM oder DOM , ab wann welches für XML Java Basics - Anfänger-Themen 14
M Wann ist ein Programm beendet? Java Basics - Anfänger-Themen 6
G Wann am besten getSize() aufrufen? Java Basics - Anfänger-Themen 6
M wann statische klassen? Java Basics - Anfänger-Themen 14
M Wann ist initialisieren sinnvoll? Java Basics - Anfänger-Themen 4
B Wann Comparator und wann Comparable Java Basics - Anfänger-Themen 6
R Wann benutzt man << oder >> ? Java Basics - Anfänger-Themen 2
G Klassen: Wann initialisiere ich wo meine Variabeln Java Basics - Anfänger-Themen 6
s_1895 zu viele Zeilen in der Main Methode Java Basics - Anfänger-Themen 4
M Rekursive Java-Methode Java Basics - Anfänger-Themen 13
H Methode über String Wert aufrufen Java Basics - Anfänger-Themen 8
B Methoden warum macht die Methode nicht das was ich erwarte? Java Basics - Anfänger-Themen 2
L Attribute aus Klasse in berechnungs Methode übergeben Java Basics - Anfänger-Themen 1
Y Aufruf von Methode nicht möglich. Java Basics - Anfänger-Themen 2
O Instanzattribut per Getter Methode zuweisbar, warum? Java Basics - Anfänger-Themen 3
C Größte Zahl aus einem Array ermitteln(als statische Methode) Java Basics - Anfänger-Themen 31
G Methoden Methode die aus einem Array ein Index ausgibt? Java Basics - Anfänger-Themen 2
R Boolean Methode Rückgabewert if() Java Basics - Anfänger-Themen 1
P Methode die ausgibt wie viele Primzahlen es zwischen 2 und n gibt Java Basics - Anfänger-Themen 10
G Rekursive Methode liefert augenscheinlich keinen boolean-Wert zurück. Java Basics - Anfänger-Themen 4
kazzam94 Methode soll Array von Boolean zurückgeben Java Basics - Anfänger-Themen 5
M negate Methode Java Basics - Anfänger-Themen 13
JavaClara Fehlermeldung bei split-Methode Java Basics - Anfänger-Themen 12
A Methode in einer anderen Klasse verwenden Java Basics - Anfänger-Themen 1
Eule25 Methode mit Array Java Basics - Anfänger-Themen 4
J Methoden Frage: Array-Werte in anderer Methode ändern Java Basics - Anfänger-Themen 4
S HashMap contains() Methode Java Basics - Anfänger-Themen 1
F Methoden Methode richtig aufrufen Java Basics - Anfänger-Themen 3
JD_1998 Array-Position aus einer Methode in einer anderen ausgeben (Kurze Frage) Java Basics - Anfänger-Themen 2
JD_1998 Random Array sortieren mit Hilfe einer Methode Java Basics - Anfänger-Themen 4
T Methode implementieren Java Basics - Anfänger-Themen 21
JD_1998 Vorgegebene Methode erweitern um Hex -> Dezimal umzuwandeln Java Basics - Anfänger-Themen 1
A While Schleife - buubelsort methode Java Basics - Anfänger-Themen 2
NeoLexx equals()-Methode Verständnis Frage anhand Code Beispiel Java Basics - Anfänger-Themen 22
X compareTo Methode wird ignoriert Java Basics - Anfänger-Themen 7
macle Rekursive String Methode, Gerade Zahlen rausfiltern Java Basics - Anfänger-Themen 10
B Wie kann ich etwas vor der Main-Methode ausführen? Java Basics - Anfänger-Themen 21
J Methode als Class anlegen Java Basics - Anfänger-Themen 7
K Übergabe von Werten (zweidimensionales Array) aus einer Methode an zweidimensionales Array in main() Java Basics - Anfänger-Themen 3
M this.object in einer parameterlosen Methode verwenden Java Basics - Anfänger-Themen 3

Ähnliche Java Themen

Anzeige

Neue Themen


Oben