/media/sda-magnetic/david/Extern-Magnetic-2022-06-29/Extern01/Dokumente-2020-11-16/disk10-ab-2020-01-10/02-debian-pc2-work/informatik/java-new/java2.5.txt


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