Wann Methode abstract?

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..
 

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

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.
 

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.
 
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);

}
 

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

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

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?
 

temi

Top Contributor
Ähnliche Java Themen
  Titel Forum Antworten Datum
berserkerdq2 Wann soll ich den Stream schließen, wenn ich das in einer Methode habe? Java Basics - Anfänger-Themen 8
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
KogoroMori21 Wann ist der richtige Zeitpunkt, um sich Hilfe zu suchen? (Bin Informatik-Student) Java Basics - Anfänger-Themen 10
I Logik Zahlungsprozess - Wann Bestellobjekt anlegen? Java Basics - Anfänger-Themen 2
C Java Array Struktur, welche ist wann besser? Java Basics - Anfänger-Themen 12
berserkerdq2 Java streams, wann nutze ich ::, also 2x Doppelpuntk bei Streams? Java Basics - Anfänger-Themen 5
W Wann und warum hashcode und equals? Java Basics - Anfänger-Themen 14
W Wann Rückgabewerte 0, 1, -1? Java Basics - Anfänger-Themen 27
K In andere Zahlensysteme umwandeln, wann klappt immer der Trick mit log? Java Basics - Anfänger-Themen 6
W Zur Vererbung: Wann und wie? Java Basics - Anfänger-Themen 35
F Wann ist es eine Instanz und wann nicht? Java Basics - Anfänger-Themen 1
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
IngoF 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
T Rekursive Methode Java Basics - Anfänger-Themen 13
Ü Methode soll Quadrat aus der Summer zurückgeben Java Basics - Anfänger-Themen 10
P Objekt einer Methode eines anderen Objektes übergeben Java Basics - Anfänger-Themen 5
Leyla Spezifischte Methode Java Basics - Anfänger-Themen 16
M Methode zielnah zeigt das gewünschte Ausgabe nicht an Java Basics - Anfänger-Themen 3
L Variablenwerte aus einer Methode übergeben Java Basics - Anfänger-Themen 2
T Methode soll etwas ausrechnen und zurückgeben (klappt nd) hat wer eine Idee? Java Basics - Anfänger-Themen 11
P Main Methode scheint Constructor aufzurufen, ohne dass es so gecoded ist Java Basics - Anfänger-Themen 2
T Aufruf der Methode einer Oberklasse, wenn sie in der Unterklasse überschrieben ist. Polymorphie. Java Basics - Anfänger-Themen 2
C Zugriff auf Methode Java Basics - Anfänger-Themen 2
M Datentypen While-Schleife eine Java Methode erstellen Java Basics - Anfänger-Themen 3
T Methode akzeptiert String nicht Java Basics - Anfänger-Themen 18
M Methode sperren bis ein Kriterium erfüllt wurde Java Basics - Anfänger-Themen 3
D Switch Case Methode aufrufen Java Basics - Anfänger-Themen 3
C Unbekannte Methode add bei Klasse die JTree erweitert Java Basics - Anfänger-Themen 14
M methode aufrufen ohne parameter Java Basics - Anfänger-Themen 1
marcelnedza Finde meinen Fehler in einer Methode nicht, Java Karol Java Basics - Anfänger-Themen 15
monsterherz einfache Methode mit Fehler den ich nicht finde Java Basics - Anfänger-Themen 21
Ostkreuz Wieso wird die Methode nochmal aufgerufen? Java Basics - Anfänger-Themen 5
G Variable aktualisiert sich nicht in rekursiver Methode Java Basics - Anfänger-Themen 4
MoxMorris Wie macht man String[] = String[] aus einer anderer Methode? Java Basics - Anfänger-Themen 18
Say super.methode / super.variable und super(variable) Java Basics - Anfänger-Themen 2

Ähnliche Java Themen

Neue Themen


Oben