Abstrakte Methoden und Klassen

Werbung
B-59
Abstrakte Methoden und Klassen
Abstrakte Methode: Spezifikation einer Methode ohne ihre Implementierung; d. h. nur
Name, Ergebnistyp und Parametertypen (Signatur der Methode).
Sie muß in jeder Unterklasse implementiert werden.
Abstrakte Klasse: Eine Klasse, die abstrakte Methoden hat (neben implementierten).
Zu abstrakten Klassen kann man keine Objekte bilden - nur zu ihren Unterklassen.
Zweck: Eine allgemeine Aufgabe (z. B. Fläche berechnen) wird in der Oberklasse spezifiziert
und in den Unterklassen unterschiedlich implementiert:
abstract class Geometrics
{ ...
abstract double area ();
...
}
class Circles extends Geometrics
{ ...
double area ()
{ return Math.PI*radius*radius; }
...
}
g.area() kann für eine Variable g vom Typ Geometrics aufgerufen werden;
dynamische Methodenbindung findet die zum Objekt passende Implementierung.
Abstrakte Klassen liegen in der Vererbungshierarchie (Interfaces liegen daneben).
Abstrakte Klassen können auch implementierte Methoden und Objektvariable haben (anders
als Interfaces).
Vorlesung Informatik B SS 98 / Folie 59
!
"
#
$
%
'
(
)
&
*
+
,
-
-
&
5
.
/
0
1
&
2
3
/
0
6
4
6
8
9
*
7
%
*
7
:
*
)
;
<
=
>
%
!
>
:
?
B-60
Graphische Benutzungsoberflächen (GUI)
Das Abstract Windowing Toolkit (Package java.awt) vereinfacht die Programmierung von GUIs.
Es enthält Klassen zum Zeichnen graphischer Elemente, GUI-Komponenten, GUI-Layout,
Ereignisbehandlung (event handlers). Übersicht:
Component
Container
Panel
Window
Frame
Scrollpane
Button
...
Label
Interface
Dialog
LayoutManager
FileDialog
Graphics
Rectangle
Flow
Border
Grid
Color
Event
...
...
Vorlesung Informatik B SS 98 / Folie 60
"
%
(
&
A
*
B
+
,
-
@
5
3
/
C
1
%
&
2
C
D
/
6
4
6
C
8
9
*
7
*
7
*
-
&
:
;
:
B-61
Ein einfaches Programmschema
import java.awt.*;
// Hauptklasse als Unterklasse von Frame:
public class GraphicWarning extends Frame
{ static private final int line = 15;
// zur Positionierung von Texten
static private final int letter = 5;
public GraphicWarning (String title)
// Konstruktor
{ super (title);
// Aufruf des Konstruktors von Frame
setBackground (Color.cyan); setForeground (Color.black);
}
public void paint (Graphics g)
// überschreibt paint in Oberklasse
{
// auf der Fläche g können wir zeichnen und schreiben:
g.drawRect (2*letter, 2*line, 33*letter, 6*line);
g.drawString ("W A R N I N G", 9*letter, 4*line);
...
}
public static void main (String[] args)
{ Frame f = new GraphicWarning ("Draw Warning"); // Objekt erzeugen
f.pack ();
f.setSize (50*letter,10*line);
// Größe festlegen
f.setVisible (true);
// führt zu erstem Aufruf von paint
...
}
}
Vorlesung Informatik B SS 98 / Folie 61
*
A
)
B
+
,
-
E
%
)
B
#
-
&
3
5
/
2
1
&
2
C
D
/
6
4
6
E
2
*
F
7
*
%
G
!
!
:
2
8
9
7
*
H
B
!
I
%
%
#
J
!
/
B-62
Reaktionen auf Ereignisse
An GUI-Komponenten können Ereignisse (events) eintreten, z. B. am Fenster „SchließenKnopf gedrückt“. Der GUI-Komponente werden Objekte (von Listener-Klassen) zugeordnet,
die Methoden haben, um darauf zu reagieren (call-back-Methoden).
WindowAdapter ist eine abstrakte Klasse, die das Interface WindowListener implementiert.
Ihre Methoden verursachen nur leere Reaktionen, wenn sie nicht überschrieben werden.
Beispiel: Eine Klasse, mit der beim Schließen des Fensters das Programm beendet wird:
class Xclose extends WindowAdapter
{ public void windowClosing (WindowEvent e)
{ System.exit (0); }
}
Am Ende von main wird ein Objekt dieser Klasse der GUI-Komponente f zugeordnet:
f.addWindowListener (new Xclose ());
Kompakter mit Sprachkonstrukt anonyme Klasse: namenlose Unterklasse, zu der es nur ein
einziges Objekt gibt; Klassendeklaration mit new-Operation kombiniert (Java 1.1):
f.addWindowListener
( new WindowAdapter ()
{ public void windowClosing (WindowEvent e)
{ System.exit (0); }
}
);
Vorlesung Informatik B SS 98 / Folie 62
:
K
%
#
A
;
:
K
B
#
L
M
!
:
B
*
+
,
-
-
&
5
3
/
2
1
&
2
C
D
/
6
2
4
6
*
7
*
%
>
8
9
7
*
;
;
$
;
%
!
)
N
'
Herunterladen