Kapitel 3, Subtyping
Typisierung
Objektorientierte Programmiersprachen müssen nicht zwingend ein Typsystem besitzen
Für Attributzugriff
Deklarationstyp
Deklarationstyp = statischer Typisierung
statische Typsicherheit
Übliche Sicherheit durch Typisierung, wie bei Programmiersprachen eben üblich (Vorteile und Nachteile)
Behälterklasse
Subtyping
Object ist per default der Supertyp aller Objekttypen
Die Subtyp-Beziehung darf keine Zyklen enthalten:
class A extends B {}
class B extends C {}
class C extends A {}
Cast
Prüfen, ob Casts richtig:
1.) Compiler
2.) Mensch
instanceof-Operator: Stellt Java extra dafür zur Verfügung
Basisdatentypen und Subtyping
Basisdatentypen: Keine Subtypbeziehung
Was passiert, wenn man einen Behälter hat, deren Elemente sowohl Zahlen aus auch Objekte sein können?
Verpacken - Bibliothek: java.lang, Klasse mit Attribut value
Wrapperklassen
Autoboxing, Boxing und Unboxing
Subtyping bei Arrays
Jeder Array ist Subtyp von Object
Klassifizierung von Objekten
Klassifikation: Theorie
Begriffe bilden Hierarchie
Ist-ein-Beziehung
Ein Holzblasinstrument ist ein Blasinstrument ist ein Musikinstrument
Verwantwortung des Programmierenden
Spezialisierung und Abstraktion
Spezialisierung: Einfürhung von Unterscheidungen, zusätzliche Fähigkeiten (im Gegensatz zu anderen)
Abstraktion: Schnittstellentypen Interfaces
Abstraktion (Verallgemeinerung)
Schnittstellentyp (interface)
++++++++++++++++++++++ Kapitel V ++++++++++++++++
Subtyping genauer
Interfaces und Subtyping
Interfacedeklaration
Klassentypen
Interfacetypen
Referenz- oder Objekttypen: Klassen-, Interface-, Arraytypen
interface Interfacename {
Liste von Konstantendeklarationen und Methodensignaturen
}
Interface: Keine Attribute
Interface: lediglich benannte Konstanten und Methodensignaturen
Modifier, public, static, final entfallen
interface Farben {
byte ROT = 0;
byte GRUEN = 1;
byte BLAU = 2;
byte GELB = 3;
}
Supertyp
Direkter Subtyp
Mengenschreibweise der Mathematik
Interfacetypen als Subtypen
Klassentypen als Subtypen
Modifkatorenliste class Klassenname extends Klassenname {
}
Modifkatorenliste class Klassenname extends Klassenname implements Liste von Interfacetypen {
}
Klassifikation und Subtyping: Subtyping ist ein hervoragendes Mittel, zur Klassifikation
Typhierarchie erweitern
Subtyp beisetzt alle Methoden des Supertyps
Vererbung, Theorie
Vererbung = inheritance
Anpassen geerbter Methoden: Überschreiben, overwriting
Aufruf einer überschriebenen Methode aus der Subklasse mittels "super"
Schlüsselwort "super"
Vererbung und Objektinitialisierung
Konstruktoren
Konstruktoren werden nicht vererbt: Wäre inakzeptabel.
Vererbung und Konstruktoren!!!
Vererbung und innere Klasse
Programmierung für Vererbung
Vererbung, Subtyping und Subclassing
Subclassing: Verberung und Subtyping in einem
Abstrakte Klassen und Methoden
Schlüsselwort "abstract"
Abstrakte Klassen
Abstrakte Methoden
Mehrfachvererbung
Wenn eine Klasse von mehreren Klassen erben kann, spricht man von Mehrfachvererbung = multiple inheritance
Java erlaubt keine Mehrfachvererbung
Vererbung und Kapselung
Privater Zugriff, Paketloser Zugriff, öffentlicher Zugriff
Geschützter Zugriff
Zwei:
1. Man kann eine Klasse so anwenden, wie sie ist (Anwendungsnutzung)
2. Man kann eine Klasse erben, um eine speziellere Klasse zu entwickeln (Verberungsnutzung)
Schlüsselwort "protected"
unveränderliche Klassen
final
Unveränderliche Methoden können nicht überschrieben werden
Zusammenspiel von Vererbung und Kapselung
private Attribute und Methoden: Werden vererbt, aber nicht zugreifbar
Realisierung gekapselter Objektgeflechte