Programmieren mit JAVA Teil IV Hauptbestandteile der Sprache • • • • • • • • Token Typen Ausdrücke und Operatoren Anweisungen Klassen Methoden Schnittstellen Pakete Vererbung • Um eine neue Klasse aus einer bestehenden abzuleiten, ist im Kopf der Klasse mit Hilfe des Schlüsselworts extends ein Verweis auf die Basisklasse anzugeben • Hierdurch erbt die abgeleitete Klasse alle Eigenschaften der Basisklasse (Variable und Methoden) • Bsp.: class Cabrio extends Auto { int vdauer; Cabrio kfz1 = new Cabrio(); kfz1.name = "MX5"; kfz1.erstzulassung = 1994; kfz1.leistung = 115; kfz1.vdauer = 120; System.out.println("Alter = "+kfz1.alter()); } Zugriff auf geerbte Membervariable • Eine abgeleitete Klasse erbt jeweils die Eigenschaften der unmittelbaren Vaterklasse, die ihrerseits die Eigenschaften ihrer unmittelbaren Vaterklasse erbt • Bsp.: class ZweisitzerCabrio extends Cabrio { boolean notsitze; ZweisitzerCabrio kfz1 = new ZweisitzerCabrio(); kfz1.name = "911-T"; kfz1.erstzulassung = 1982; kfz1.leistung = 94; kfz1.vdauer = 50; kfz1.notsitze = true; System.out.println("Alter = "+kfz1.alter()); } Methodenüberlagerung • Neben den Membervariablen erbt eine abgeleitete Klasse auch die Methoden ihrer Vaterklasse • Es dürfen auch bereits von der Vaterklasse geerbte Methoden neu definiert werden. In diesem Fall spricht man von Überlagerung der Methode • Bsp.: class ZweisitzerCabrio extends Cabrio { boolean notsitze; public int alter() { return 12 * (1999 - erstzulassung); } } Klassenvariablen • Variablen, die innerhalb einer Klasse mit dem Attribut static versehen werden, nennt man Klassenvariablen • Im Gegensatz zu den Instanzvariablen existieren Klassenvariablen unabhängig von einem Objekt • Jede Klassenvariable wird nur einmal angelegt und kann von allen Methoden der Klasse aufgerufen werden • Klassenvariablen sind daher vergleichbar mit globalen Variablen • Bsp.: Instanzenzähler in eine Klasse Beispiel Klassenvariable public class Testauto { static private int objcnt = 0; public Testauto() { ++objcnt; } public void finalize() { --objcnt; } public static void main(String args[]) { Testauto auto1; Testauto auto2 = new Testauto(); System.out.println("Anzahl Testauto-Objekte: " + Testauto.objcnt); } } Klassenmethoden • Methoden, die unabhängig von einer bestimmten Instanz existieren • Klassenmethoden werden ebenfalls mit Hilfe des static-Attributs deklariert • Klassenmethoden besitzen keinen this-Zeiger • Klassenmethoden werden häufig da eingesetzt, wo Funktionalitäten zur Verfügung gestellt werden, die nicht datenzentriert arbeiten oder auf primitiven Datentypen operieren • Bsp. 1: Die Klasse System ist eine Art Toolbox, die Funktionen wie Aufruf des Garbage Collectors oder Beenden des Programms zur Verfügung stellt • Bsp. 2: Methoden der Klasse Math, die eine große Anzahl an Funktionen zur Fließkomma-Arithmetik zur Verfügung stellt Beispiel Klassenmethoden • Das folgende Listing zeigt die Verwendung der Klassenmethode sqrt der Klasse Math zur Ausgabe einer Tabelle von Quadratwurzeln public class WurzelX { public static void main(String[] args) { double x, y; for (x = 0.0; x <= 10.0; x = x + 1.0) { y = Math.sqrt(x); System.out.println("sqrt("+x+") = "+y); } } } Interfaces • Ein Interface ist eine besondere Form einer Klasse, die ausschließlich abstrakte Methoden und Konstanten enthält • Anstelle von class wird zur Definition eines Interfaces das Schlüsselwort interface verwendet • Was bei der Vererbung von Klassen als Ableitung bezeichnet wird, nennt man bei Interfaces Implementierung • Durch das Implementieren eines Interfaces verpflichtet sich die Klasse, alle Methoden, die im Interface definiert sind, zu implementieren • Die Implementierung eines Interfaces wird durch das Schlüsselwort implements bei der Klassendefinition angezeigt public interface Fortbewegungsmittel { public int kapazitaet(); public double kilometerPreis(); } public class Auto implements Fortbewegungsmitte { public String name; public int erstzulassung; public int leistung; private int anzahlSitze; private double spritVerbrauch; private double spritPreis; public double kapazitaet() { return anzahlSitze; } public double kilometerPreis() { return spritVerbrauch*spritPreis/100; } } Pakete 1 java.applet java.awt java.awt.color java.awt.datatransfer java.awt.dnd java.awt.font java.awt.geom java.awt.im java.awt.image java.awt.image.renderable java.awt.print java.beans java.beans.beancontext java.io java.lang java.lang.reflect java.lang.ref Applets Abstract Windowing Toolkit Unterstützung für unterschiedliche Farbsysteme AWT Clipboard-Funktionen Drag & Drop Erweiterte Unterstützung für Schriftarten 2D-Bildverarbeitung Eingabe von fernöstlichen Schriftzeichen AWT-Bildverarbeitung Darstellungsunabhängige Bildverarbeitung Druckausgabe Java Beans Java Beans-Unterstützung Bildschirm- und Datei-I/O Elementare Sprachunterstützung Reflection-API Referenz-Objekte Pakete 2 java.math java.net java.rmi java.rmi.dgc java.rmi.registry java.rmi.server java.security java.security.acl java.security.cert java.security.interfaces java.security.spec java.sql java.text java.util java.util.jar java.util.mime java.util.zip Fließkomma-Arithmetik Netzwerkunterstützung Remote Method Invocation (RMI) RMI Distributed Garbage Collection RMI Service Registry RMI-Support Security-Dienste Access Control Lists Zertifikate DSA-Interfaces Sicherheitsspezifikationen Datenbankzugriff (JDBC) Internationalisierung Diverse Utilities und Datenstrukturen Zugriff auf JAR-Files Multipurpose Internet Mail Extensions (MIME) Zugriff auf ZIP-Files