Script Java
Script Java Script Java
8.1 Abstrakte Methoden und Klassen abstract public class NumberSystem{ abstract int toInt(String s); abstract String toString(int value); } Da die Methoden toInt() und toString() in der Klasse NumberSystem abstrakt sind, ist es plausibel, dass die Klasse NumberSystem nicht instanziert werden kann. Aus dem Programm ist aber auch zu entnehmen, dass die Klasse ArabicSystem ebenfalls eine abstrakte Klasse ist, obwohl sie keine abstrakte Methoden deklariert 1 . Es ist möglich, eine Klasse als abstract zu deklarieren, auch wenn diese keine abstrakten Methoden enthält. Hierdurch lässt sich eine Instanzierung verhindern. Im Beispiel können lediglich die Unterklassen der Klasse ArabicSystem instanziert werden. Da erst in den Unterklassen die bereits in der Oberklasse deklarierte Instanzvariable radix initialisiert wird, wäre eine Instanzierung von ArabicSystem wenig sinnvoll. Die Klasse NumberField, eine Unterklasse von TextField, wird für die Textfelder der graphischen Benutzeroberfläche verwendet. Sie deklariert Methoden, um den int- Wert einer Zahl, welche der Benutzer eingegeben hat, zu ermitteln oder eine Zahl als String im GUI anzuzeigen. Andererseits ermöglicht sie auch die Repräsentation der Zahlen in den unterschiedlichen Zahlenformaten. Nach eingehender Betrachtung merkt man aber, dass die besagten Methoden lediglich die Methoden toInt() und toString() aufrufen. Der Empfänger numberSystem der Botschaften toInt() und toString() wird als Instanz der Klasse NumberSystem deklariert und referenziert immer eine Instanz derjenigen „Zahlensystem-Klasse“, welche momentan in der Choice selektiert ist 2 . Entscheidend dabei ist, dass numberSystem vom Typ NumberSystem deklariert wurde, da hierdurch eine konversionslose Zuweisung gewährleistet ist. Hätte man numberSystem als Instanz der Klasse DecNumber deklariert, so könnte man ihr nicht eine Instanz der Klasse RomanNumber zuweisen, da ein type cast erforderlich wäre. Dies illustriert auch einen weiteren Vorteil für die Verwendung von abstrakten Methoden bzw. Klassen: Deren Einsatz zwingt den Programmierer, bereits auf höherer Hierarchiestufe die Signatur von weiter unten implementierten Methoden festzulegen, 1 Die Unterscheidung zwischen abstrakten Klassen und nicht-abstrakten Klassen wird im Programm zusätzlich noch durch den Identifier unterstrichen: abstrakte Klassen werden als ∼System und sonstige Klassen als ∼Number bezeichnet. 2 In der Klasse UserFrame wird ein Array base verwendet, welcher gewissermassen „auf Vorrat“ Instanzen der fünf „Zahlensystem-Klassen“ enthält. Eine solche Instanz wird der Klasse NumberField einerseits zu Programmbeginn durch Aufruf ihres Konstruktors und andererseits durch die Methode changeBase() übergeben. 210
8.1 Abstrakte Methoden und Klassen wodurch deren Zugriff vereinheitlicht wird. Es ist beispielsweise möglich, in der Klasse NumberField lediglich den Aufruf numberSystem.toInt() zu setzen. Die virtuelle Maschine ruft dann diejenige Methode auf, welche in der Klasse der jeweiligen Instanz deklariert ist. Hätte man keine abstrakten Methoden deklariert und würde zusätzlich die Signatur der jeweiligen Methoden in den Klassen ArabicSystem und RomanNumber unterschiedlich ausfallen, müsste in der Klasse NumberField für jede Instanz der Methodenaufruf separat gemacht werden. Siehe auch: 8.1.2.2 8.1.2 Syntax 8.1.2.1 Abstrakte Methoden Eine abstrakte Methode deklariert lediglich die Signatur der Methode, nicht aber deren Rumpf. Die Deklaration verwendet das Schlüsselwort abstract und wird mit einem Semikolon abgeschlossen. AbstractMethod abstract type Identifier(ParameterList); Beispiele: abstract int toInt(String s); abstract String toString(int value); Abstrakte Methoden werden an Unterklassen weitervererbt. Eine Unterklasse, welche einen Methodenrumpf für eine abstrakte Methode deklariert, implementiert diese. 8.1.2.2 Abstrakte Klassen Abstrakte Klassen werden mit dem Schlüsselwort abstract bezeichnet und können nicht instanziert werden. 211
- Seite 159 und 160: 6.2 Visiblity Modifiers Eine Instan
- Seite 161 und 162: 6.2 Visiblity Modifiers 6.2.2 Synta
- Seite 163 und 164: 7.1 Calendar 7Method Overloading Ar
- Seite 165 und 166: 7.1 Calendar } text.requestFocus();
- Seite 167 und 168: 7.1 Calendar In den restlichen Zeil
- Seite 169 und 170: 7.1 Calendar Die Klassenmethode get
- Seite 171 und 172: 7.2 Graphics public void setTime(in
- Seite 173 und 174: 7.2 Graphics in der Methode paint()
- Seite 175 und 176: 7.2 Graphics zunehmen, muss man als
- Seite 177 und 178: 7.3 Arrays g.drawLine(x+r,y+r, x+r+
- Seite 179 und 180: 7.3 Arrays } } "one","two","three",
- Seite 181 und 182: 7.3 Arrays message.setText(time.toF
- Seite 183 und 184: 7.3 Arrays if (minutes%15==0) gepr
- Seite 185 und 186: 7.4 Exception Handling ArrayAcess I
- Seite 187 und 188: 7.4 Exception Handling Abbildung 7-
- Seite 189 und 190: 7.4 Exception Handling Handling Ins
- Seite 191 und 192: 7.4 Exception Handling Wenn es im P
- Seite 193 und 194: 7.4 Exception Handling public void
- Seite 195 und 196: 7.4 Exception Handling Schlüsselwo
- Seite 197 und 198: 7.5 Zusammenfassung ExceptionHandli
- Seite 199 und 200: 8.1 Abstrakte Methoden und Klassen
- Seite 201 und 202: 8.1 Abstrakte Methoden und Klassen
- Seite 203 und 204: 8.1 Abstrakte Methoden und Klassen
- Seite 205 und 206: 8.1 Abstrakte Methoden und Klassen
- Seite 207 und 208: 8.1 Abstrakte Methoden und Klassen
- Seite 209: 8.1 Abstrakte Methoden und Klassen
- Seite 213 und 214: 9.1 Interfaces und Adapter-Klassen
- Seite 215 und 216: 9.1 Interfaces und Adapter-Klassen
- Seite 217 und 218: 9.1 Interfaces und Adapter-Klassen
- Seite 219 und 220: 9.1 Interfaces und Adapter-Klassen
- Seite 221 und 222: 9.2 Zusammenfassung Muss man zwecks
- Seite 223 und 224: 10.1 Zweidimensionaler Array 10Arra
- Seite 225 und 226: 10.1 Zweidimensionaler Array public
- Seite 227 und 228: 10.1 Zweidimensionaler Array new Ti
- Seite 229 und 230: 11.1 Turtle-Geometrie } (int)Math.r
- Seite 231 und 232: 11.2 Vererbung forward() right() Ab
- Seite 233 und 234: 11.3 Rekursion Abbildung 11-3: Turt
- Seite 235 und 236: 11.3 Rekursion } setSize(400,400);
- Seite 237 und 238: 11.3 Rekursion public void tree(int
- Seite 239 und 240: 11.4 Stack import java.awt.event.*;
- Seite 241 und 242: 11.4 Stack public NumCheckbox(int n
- Seite 243 und 244: 11.4 Stack Abbildung 11-8: Turtle -
- Seite 245 und 246: 11.4 Stack forward 30 push() forwar
- Seite 247 und 248: 12.1 Binärer Baum } else return "f
- Seite 249 und 250: 12.1 Binärer Baum Abbildung 12-2:
- Seite 251 und 252: 13.1 Anhang A: Java Syntax A nhäng
- Seite 253 und 254: 13.1 Anhang A: Java Syntax Prior. O
- Seite 255 und 256: 13.2 Anhang B: Übersicht Klassenbi
- Seite 257 und 258: 13.2 Anhang B: Übersicht Klassenbi
- Seite 259 und 260: 13.4 Anhang D: Prinzipien guten Pro
8.1 Abstrakte Methoden und Klassen<br />
wodurch deren Zugriff vereinheitlicht wird. Es ist beispielsweise möglich, in der Klasse<br />
NumberField lediglich den Aufruf numberSystem.toInt() zu setzen. Die<br />
virtuelle Maschine ruft dann diejenige Methode auf, welche in der Klasse der jeweiligen<br />
Instanz deklariert ist. Hätte man keine abstrakten Methoden deklariert und würde<br />
zusätzlich die Signatur der jeweiligen Methoden in den Klassen ArabicSystem und<br />
RomanNumber unterschiedlich ausfallen, müsste in der Klasse NumberField für jede<br />
Instanz der Methodenaufruf separat gemacht werden.<br />
Siehe auch: 8.1.2.2<br />
8.1.2 Syntax<br />
8.1.2.1 Abstrakte Methoden<br />
Eine abstrakte Methode deklariert lediglich die Signatur der Methode, nicht aber deren<br />
Rumpf. Die Deklaration verwendet das Schlüsselwort abstract und wird mit einem<br />
Semikolon abgeschlossen.<br />
AbstractMethod<br />
abstract type Identifier(ParameterList);<br />
Beispiele: abstract int toInt(String s);<br />
abstract String toString(int value);<br />
Abstrakte Methoden werden an Unterklassen weitervererbt. Eine Unterklasse, welche<br />
einen Methodenrumpf für eine abstrakte Methode deklariert, implementiert diese.<br />
8.1.2.2 Abstrakte Klassen<br />
Abstrakte Klassen werden mit dem Schlüsselwort abstract bezeichnet und können<br />
nicht instanziert werden.<br />
211