PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : [JAVA] Was für einen Sinn haben abstrakte Klassen??



McSnoop
21-10-2004, 14:00
Was für einen Sinn haben abstrakte Klassen??

ich weis das man da nur den Kopf hinschreibt und dann immer wenn man davon eine Subklasse schreibt das man diese dann explizit überschreiben muss. Aber Warum kann man das nicht einfach in einer Hauptklasse definieren und dann diese einfach überschreiben??

greetz
Snoop

mwanaheri
21-10-2004, 14:13
Wenn du das Ding nur einmal brauchst, brauchst du tatsächlich keine Abstrakte
Klasse. In größeren Projekten, in denen du vergleichbares mehrfach brauchst, garantiert das Konsistenz, da Methoden, Parameter und Rückgabewerte definiert sind. Zudem ist die implements-klausel eine Möglichkeit, die fehlende Mehrfachvererbung zu umgehen.

anda_skoa
21-10-2004, 14:21
Eine abstrakte Klasse in Java bietet dir erstens die Möglichkeiten von Interface, also die Signatur von Methoden festzulegen, sodass dann davon abgeleitete Klassen als diese gemeinsame Basis angesprochen werden können.

Im Gegensatz zu einem Interface, kann man aber für Methoden bereits Grundimplementationen vorgeben und auch Konstanten und Variablen definieren.

Im Gegensatz zu einer normalen Klasse, muss zumindest eine Methode abstract sein, also keine Implementation haben, d.h. das von der abtrakten Klasse selbst keine Instanz erzeugt werden kann, sondern immer nur von Subklassen, die alle abtrakten Methoden implementieren.

Ciao,
_

McSnoop
21-10-2004, 14:26
so wie du das grad geschrieben hast könnte das glatt aus dem buch sein, was ich hier grad lese. ^^

Aber so richtig hilft mir das nicht weiter.

Kannst du ein Beispiel liefern und es dabei erklären, wie das funktioniert??

In dem Buch hier seh ich keinen grossen unterschied zu normalen klassen und deren überschreiben.

---
Snoop

McSnoop
21-10-2004, 14:30
Der Abschnitt Interfaces kommt erst bei mir im nächsten Kapitel, dazu kann ich jetzt nichts beurteilen. =(

mwanaheri
21-10-2004, 14:48
so wie du das grad geschrieben hast könnte das glatt aus dem buch sein, was ich hier grad lese. ^^

In dem Buch hier seh ich keinen grossen unterschied zu normalen klassen und deren überschreiben.


Bei einer abstrakten Klasse vergisst du nie, eine Methode zu überschreiben.

McSnoop
21-10-2004, 15:06
aber theoretisch braucht man die ganzen abtrakten klassen nicht wenn man sich an regeln hält und die Übersicht nicht verliert oder??

mwanaheri
21-10-2004, 16:02
aber theoretisch braucht man die ganzen abtrakten klassen nicht wenn man sich an regeln hält und die Übersicht nicht verliert oder??

Jein, denn du kannst eine neue Klasse nur von einer einzelnen ableiten, aber viele andere implementieren. Und es muss ja nicht jede Methodendefinition leer sein.
'Runnable' ist ein gutes Beispiel dafür. Wenn du eine Klasse von Thread ableitest, kannst du sie nicht von JFrame ableiten. Alternativ kannst du aber eine Klasse von JFrame ableiten und Runnable implementieren. Zwei Methoden
überschreiben, und schon kannst du die Thread-Funktionalität nutzen.

McSnoop
21-10-2004, 17:12
jo thx, das werd ich mir anschaun, aber wie weiter oben schon geschrieben worden, ich werde für das was ich machen will erst mal keine akstrakten klassen brauchen. Aber für später ist es bestimmt nicht verkehrt auch das zu beherschen.

greetz
Snoop

anda_skoa
21-10-2004, 19:00
aber theoretisch braucht man die ganzen abtrakten klassen nicht wenn man sich an regeln hält und die Übersicht nicht verliert oder??

Das hilft dir nicht wenn du in der Basisklasse nicht alle Sachen implementieren kannst.
Beispiel "aus dem Lehrbuch" sind da geomentrische Formen.
Die Basisklasse Form kann bestimmte Methoden nicht implementieren, weil Form ein abstraktes Konzept ist.



abstract public class Form
{
abstract public int flaeche(); // hat in Form keine Bedeutung
}




public class Rechteck extends Form
{
private int m_a;
private int m_b;

public Rechteck(int a, int b)
{
m_a = a;
m_b = b;
}

// Implementierung der abstrakten API
public int flaeche()
{
return m_a * m_b;
}
}


Ciao,
_

Sym
22-10-2004, 08:28
jo anda_skoa: Deine Klasse erbt (oder implementiert) da leider gerade garnichts. Hast Du wohl vergessen. ;)