Abstrakte Klassen

.maik.

Bekanntes Mitglied
Abend.
Ich wollte gerade bei der Insel mit der Oberflächenprogrammierung anfangen. Nun wird da von abstrakten klassen gesprochen . muss ich mich erst in das thema der abstrakten klassen einarbeiten oder werde ich das auch so verstehen ? wenn nicht, koenntet ihr mir ein tut geben, wo es gut erklärt wird ?

danke

Maik
 

.maik.

Bekanntes Mitglied
Ich weiß, dass diese Frage jetzt nicht ganz hier rein passt, aber ich mache es mal trotzdem. Wieso ist das folgende nicht zulässig : subklasseReferenz = superklasseReferenz


danke
 

.maik.

Bekanntes Mitglied
mh. bestimmt habe ich gerade einen denkfehler. eig ist es doch genau umgekehrt. die subklasse ist spezialisiert und deshlab muss eine instanz von einer subklasse nicht gleich der instanz der superklasse sein .
 

Eldorado

Bekanntes Mitglied
Ein Opel ist ein Auto, ein Auto aber nicht unbedingt ein Opel (bitte jetzt keine Kommentare wegen der Automarke...^^).
 

redbulls

Mitglied
Eine abstrakte Klasse ist einfache eine Klasse mit ausschließlich abstrakten Methoden. Eine abstrakte Methoden ist eine Methode, die nicht ausprogrammiert wurde(Es fehlt der Methodenrumpf). Man kann auch keine Instanz einer abstrakten Klasse erzeugen. Man muss erst die Methoden nach seinen Anforderungen vervollständigen :)
 

tfa

Top Contributor
Eine abstrakte Klasse ist einfache eine Klasse mit ausschließlich abstrakten Methoden.
Falsch. In abstrakten Klassen können auch Methoden implementiert sein. Theoretisch ist es möglich, dass eine abstrakte Klasse keine einzige abstrakte Methode besitzt.
 

redbulls

Mitglied
Sorry eine abstrakte Klasse mit ausschließlich abstrakten Methoden ist ein Interface, aber sobald eine Klasse eine abstrakte Methode hat, muss sie abstrakt sein. Meiner Meinung nach gibt es keine abstrakte Klasse ohne mindestens eine abstrakte Methode.
 

Landei

Top Contributor
tfa hat recht, und nicht nur "theoretisch". Von manchen Klassen ist es einfach nicht sinnvoll, Instanzen zu bilden, selbst wenn man alle Methoden implementieren kann. Wenn ich z.B. Kunde und Lieferant in meinem System habe, und deren gemeinsame Eigenschaften in einer Klasse Person bündele, dann will ich trotzdem sicherstellen, dass niemand [c]new Person()[/c] schreiben kann, auch wenn keine Methode in Person abstrakt ist.
 

tfa

Top Contributor
tfa hat recht, und nicht nur "theoretisch". Von manchen Klassen ist es einfach nicht sinnvoll, Instanzen zu bilden, selbst wenn man alle Methoden implementieren kann. Wenn ich z.B. Kunde und Lieferant in meinem System habe, und deren gemeinsame Eigenschaften in einer Klasse Person bündele, dann will ich trotzdem sicherstellen, dass niemand [c]new Person()[/c] schreiben kann, auch wenn keine Methode in Person abstrakt ist.

Da kann man sich auch anders behelfen. Zum Beispiel durch nicht-öffentliche Konstruktoren und Fabrik-Methoden oder eine Factory. An eine Klasse abstract zu schreiben, ohne dass es eine abstrakte Methode gibt, halte ich für verwirrend.
 

Landei

Top Contributor
Wieso? Abstrakt heißt, dass diese Klasse ausschließlich dazu da ist, von anderen erweitert zu werden - das hat mit den Methoden gar nicht unmittelbar zu tun. Offensichtlich hielten es die Java-Gurus für wichtig, dass man auch ohne abstrakte Methoden eine abstrakte Klasse haben kann - ansonsten hätte man einfach die Konvention einführen können, dass eine Klasse "automatisch" mit der ersten abstrakten Methode auch abstrakt wird, und kein [c]abstract[/c] auf Klassenebene zuzulassen.

Und es gibt auch Klassen in der Java-API, die abstrakt sind, obwohl alle Methoden implementiert sind, z.B. die ganzen Adapter-Klassen wie [c]MouseAdapter[/c], [c]WindowAdapter[/c]...
 

tfa

Top Contributor
ansonsten hätte man einfach die Konvention einführen können, dass eine Klasse "automatisch" mit der ersten abstrakten Methode auch abstrakt wird, und kein abstract auf Klassenebene zuzulassen
Das wär ja wirklich furchtbar. Dann steigt man ja gar nicht mehr durch.

Trotzdem finde ich diese Praktik unschön. Auch die Tatsache, dass das in der Java-API so gemacht wird, ändert daran nichts. Da stecken aber noch viel schlimmere Unschönheiten drin.
 
B

bygones

Gast
Wieso? Abstrakt heißt, dass diese Klasse ausschließlich dazu da ist, von anderen erweitert zu werden
du hast aber anfangs davon gesprochen abstract zu verwenden, wenn du nicht willst dass sie instanziiert wird. Das sind 2 versch. Sachen.

Bei der ersten stimme ich tfa zu - um eine Instanziierung zu verhindern soll man nicht abstract nehmen, weil es eben, wie du wiederum richtig sagst vor allem Vererbung signalisiert.
 

Landei

Top Contributor
Na ja, eine Klasse, die weder instantiiert wird, noch als Basisklasse dient, ist relativ sinnfrei (*), oder? Insofern hängen die beiden Punkte schon sehr eng zusammen.

(*) Sieht man einmal von rein statischen "Utility-Klassen" ab.
 

nrg

Top Contributor
also ich habe öfters config-Klassen verwendet, die demnach nur einmal exisiteren. Config wird geladen und ist danach aus jeder anderen Klasse durch die statischen Methoden abrufbar. Diese Klassen habe ich dann auch abstract deklariert, weil eine Instanziierung da für mich keinen Sinn macht. Ist das falsch und sollte besser durch einen private-Konstruktor gelöst werden?
 
B

bygones

Gast
Ist das falsch und sollte besser durch einen private-Konstruktor gelöst werden?

macht sowas für dich Sinn ?
Java:
public class DummyTest {
    public static void main(String[] args) {
        Foo foo = new Bar();
        Bar.foo();
    }
}

abstract class Foo {
    public static String foo() {
        return "foo";
    }
}

class Bar extends Foo {

}
 

Landei

Top Contributor
In dem Fall sollte man lieber den Konstruktor private machen, das drückt besser aus, was man will (keine Instanzen, keine Vererbung). Am besten finde ich den Stil mit einer "selbstdokumentierenden" Fehlermeldung, damit es wirklich ganz klar ist, und nicht jemand versehentlich den "leeren" Konstruktor rauslöscht oder über eine statische Methode aufruft:

Java:
public class Foo {
    private Foo() {
        throw new UnsupportedOperationException("Utility class");
    }

    public static String foo() {
        return "foo";
    }
}
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
J Methodenaufrufe abstrakte Klassen, Interfaces Java Basics - Anfänger-Themen 17
M Abstrakte Klassen - Notation Java Basics - Anfänger-Themen 9
G Abstrakte Klassen Java Basics - Anfänger-Themen 11
J Objekte und Abstrakte Klassen Java Basics - Anfänger-Themen 2
J Java Interface/abstrakte Klassen Java Basics - Anfänger-Themen 2
M Erste Schritte Prüfungsbeispiel: Interface / abstrakte Klassen Java Basics - Anfänger-Themen 8
D Abstrakte Klassen Verständniss Frage Java Basics - Anfänger-Themen 4
D Interface Interfaces und abstrakte Klassen implementieren Java Basics - Anfänger-Themen 4
B Abstrakte Klassen Java Basics - Anfänger-Themen 7
S Abstrakte Klassen Java Basics - Anfänger-Themen 2
C Dynamische Referenz & abstrakte Klassen Java Basics - Anfänger-Themen 3
V Interface Interfaces und abstrakte Klassen Java Basics - Anfänger-Themen 3
G Abstrakte Klassen - theoretische Frage Java Basics - Anfänger-Themen 2
OnDemand Abstrakte Klassen Java Basics - Anfänger-Themen 4
T OOP Abstrakte Klassen und ihre Kinder: wie läuft das? Java Basics - Anfänger-Themen 3
M Abstrakte Klassen Java Basics - Anfänger-Themen 2
J Interfaces Abstrakte Klassen Java Basics - Anfänger-Themen 15
M Interface und Abstrakte Klassen Java Basics - Anfänger-Themen 12
R Namenskonvention abstrakte Klassen Java Basics - Anfänger-Themen 6
C OOP Objektstruktur: abstrakte Klassen Java Basics - Anfänger-Themen 3
T OOP abstrakte klassen - methoden Java Basics - Anfänger-Themen 8
D Abstrakte Klassen und Interfaces als Paramter in Funktionen Java Basics - Anfänger-Themen 3
T Interfaces: Braucht man abstrakte Klassen eigentlich noch? Java Basics - Anfänger-Themen 3
T Abstrakte Klassen Java Basics - Anfänger-Themen 6
C abstrakte Klassen mögen mich nicht... Java Basics - Anfänger-Themen 2
I Abstrakte Klassen Java Basics - Anfänger-Themen 8
D Zusammenfassung von Klassen (Vererbung? Abstrakte Klass? ...?) Java Basics - Anfänger-Themen 8
G Abstrakte Klassen und Methoden Java Basics - Anfänger-Themen 3
C Schnittstellen und Abstrakte Klassen Java Basics - Anfänger-Themen 3
I Abstrakte Klassen Java Basics - Anfänger-Themen 22
G Abstrakte Klassen ? Java Basics - Anfänger-Themen 9
nadoria abstrakte Klassen Java Basics - Anfänger-Themen 6
M Unterscheid Abstrakte Klassen/Interface Klassen? Java Basics - Anfänger-Themen 7
T abstrakte Klassen? Java Basics - Anfänger-Themen 2
M abstrakte klassen und interfaces Java Basics - Anfänger-Themen 2
M abstrakte klassen / Schnittstellen Java Basics - Anfänger-Themen 4
H abstrakte Klassen, Interfaces Java Basics - Anfänger-Themen 13
R Interfaces durch abstrakte Klassen ersetzbar? Java Basics - Anfänger-Themen 8
A Abstrakte Klassen und Interfaces Java Basics - Anfänger-Themen 11
S Vererbung Abstrakte Methoden: Wozu das Ganze?! Java Basics - Anfänger-Themen 7
S abstrakte methoden in subclass? Java Basics - Anfänger-Themen 7
E abstrakte Klasse implementiert ein Interface Java Basics - Anfänger-Themen 40
G Java Abstrakte Methoden Java Basics - Anfänger-Themen 2
T Abstrakte Klasse und Interfaces Java Basics - Anfänger-Themen 12
D Abstrakte Klasse, Konstruktorkette, Attribute setzen Java Basics - Anfänger-Themen 12
L Abstrakte Typen und Schnittstellen Java Basics - Anfänger-Themen 19
S Abstrakte Methode nutzen Java Basics - Anfänger-Themen 9
J abstrakte Methode in Klasse mit Rückgabetyp der abgeleiteten Klasse Java Basics - Anfänger-Themen 5
I Abstrakte Klasse - static Attribute deklarieren Java Basics - Anfänger-Themen 14
T Übungsaufgabe abstrakte Klasse Java Basics - Anfänger-Themen 21
A Interface Abstrakte Interface Methode kann nicht benutzt werden Java Basics - Anfänger-Themen 10
S Gehaltsberechnung (Vererbung, abstrakte Methoden) Java Basics - Anfänger-Themen 6
S Datentypen Abstrakte Datentypen Java Basics - Anfänger-Themen 0
kilopack15 Beziehung Interface - (abstrakte) Klasse -Unterklasse Java Basics - Anfänger-Themen 3
K Abstrakte Klasse: vererbte Klasse; instance of? Java Basics - Anfänger-Themen 26
A Abstrakte Datentypen - Methode delete Java Basics - Anfänger-Themen 6
N Vererbung Abstrakte Klasse stateful Java Basics - Anfänger-Themen 3
D Methoden Abstrakte Methoden Java Basics - Anfänger-Themen 3
W Abstrakte Klasse mit Variable? Java Basics - Anfänger-Themen 2
C Abstrakte und virtuelle Methoden in Java Java Basics - Anfänger-Themen 4
E verdeckte abstrakte Methode sinnvoll? Java Basics - Anfänger-Themen 7
A Vererbung Abstrakte Klasse mit Methode die Objekte der Subklassen benutzt? Java Basics - Anfänger-Themen 7
W Abstrakte und konkrete Klasse Java Basics - Anfänger-Themen 4
F Abstrakte Klasse doch zum "Teil" instanzieren? Java Basics - Anfänger-Themen 4
H Abstrakte Basisklasse Verständnisproblem! Java Basics - Anfänger-Themen 8
M Statische Methoden in Interface/Abstrakte Klasse Java Basics - Anfänger-Themen 6
N Datentypen abstrakte Klasse wird instanziert Java Basics - Anfänger-Themen 3
D Methoden abstrakte Methoden und Rückgabewerte Java Basics - Anfänger-Themen 2
B Abstrakte Methode vs. Interface Java Basics - Anfänger-Themen 2
propra Interface - abstrakte Klasse Java Basics - Anfänger-Themen 18
N Abstrakte Klasse Java Basics - Anfänger-Themen 28
L Über abstrakte Klasse auf eine Klasse zugreifen? Java Basics - Anfänger-Themen 6
V Vererbung Abstrakte Methode Java Basics - Anfänger-Themen 3
J Welchen Sinn haben abstrakte Methoden? Java Basics - Anfänger-Themen 4
D Wann genau abstrakte Klasse und wann ein Interface verwenden? Java Basics - Anfänger-Themen 4
StupidAttack Abstrakte Methoden in nicht-abstrakter Methode in abstrakter Klasse Java Basics - Anfänger-Themen 6
T Abstrakte Klasse Java Basics - Anfänger-Themen 3
S Abstrakte Klasse Java Basics - Anfänger-Themen 5
T OO, Konstruktor, abstrakte Methoden Java Basics - Anfänger-Themen 13
K Abstrakte Klasse vs. Interface Java Basics - Anfänger-Themen 21
K Abstrakte Klasse bilden? Java Basics - Anfänger-Themen 11
S Abstrakte Klasse, festlegen, dass Methode verändert werden muss. Java Basics - Anfänger-Themen 4
H Warum Java? | Abstrakte Klasse = Modul? Java Basics - Anfänger-Themen 20
J abstrakte klasse und methode super Java Basics - Anfänger-Themen 2
H Eine Abstrakte Klasse muss. Java Basics - Anfänger-Themen 7
G Abstrakte Klasse "Point" Java Basics - Anfänger-Themen 2
G Abstrakte Methode in gleicher Klasse aufrufen Java Basics - Anfänger-Themen 5
M abstrakte Klasse Java Basics - Anfänger-Themen 3
F Abstrakte Klasse: Konstruktor vs init() Java Basics - Anfänger-Themen 13
G Abstrakte Klasse (was passiert hier) Java Basics - Anfänger-Themen 3
G Interface oder Abstrakte Klasse? Java Basics - Anfänger-Themen 3
G konkretes beispiel: interface hier besser als abstrakte kl. Java Basics - Anfänger-Themen 4
Acha Unterschied Interface - abstrakte Klasse Java Basics - Anfänger-Themen 4
B OOP: abstrakte klasse implementiert interface Java Basics - Anfänger-Themen 3
L abstrakte Methode nicht implementiert! Java Basics - Anfänger-Themen 5
D Abstrakte Klasse Graphics Java Basics - Anfänger-Themen 3
A Abstrakte Klasse Java Basics - Anfänger-Themen 3
G abstrakte klasse Java Basics - Anfänger-Themen 6
F Abstrakte Klasse Baum Java Basics - Anfänger-Themen 6
A Eine abstrakte Methode static machen? Java Basics - Anfänger-Themen 4

Ähnliche Java Themen

Neue Themen


Oben