Objektorientiertes Programmieren. Agenda. Programmierung in Java. 3. Semester ETM Übung



Ähnliche Dokumente
Java Einführung Packages

Einführung in die Programmierung

Verhindert, dass eine Methode überschrieben wird. public final int holekontostand() {...} public final class Girokonto extends Konto {...

Hello World. Javakurs 2014, 1. Vorlesung. Sebastian Schuck. basierend auf der Vorlage von Arne Kappen. wiki.freitagsrunde.org. 3.

Java Einführung Methoden in Klassen

Computeranwendung und Programmierung (CuP)

Einführung in Java. PING e.v. Weiterbildung Andreas Rossbacher 24. März 2005

Software-Engineering und Optimierungsanwendungen in der Thermodynamik

3 Objektorientierte Konzepte in Java

Programmierkurs Java

Abschnitt 12: Strukturierung von Java-Programmen: Packages

Java Kurs für Anfänger Einheit 4 Klassen und Objekte

Das erste Programm soll einen Text zum Bildschirm schicken. Es kann mit jedem beliebigen Texteditor erstellt werden.

Programmieren in Java

Die Programmiersprache Java. Dr. Wolfgang Süß Thorsten Schlachter

Workshop 6. Einführung in die objektorientierte Programmierung. Teil: Java mit BlueJ

Einführung in die objektorientierte Programmierung mit Java. Klausur am 19. Oktober 2005

Einführung in Javadoc

Objektorientierte Programmierung

Vorlesung Informatik II

Javakurs 2013 Objektorientierung

Java: Vererbung. Teil 3: super()

Javadoc. Programmiermethodik. Eva Zangerle Universität Innsbruck

Einführung in die Java- Programmierung

5. Tutorium zu Programmieren

Studentische Lösung zum Übungsblatt Nr. 7

Vorkurs C++ Programmierung

Einführung in die C++ Programmierung für Ingenieure

Objektorientierte Programmierung OOP

Vererbung & Schnittstellen in C#

Java Einführung Programmcode

4. AuD Tafelübung T-C3

Willkommen zur Vorlesung. Objektorientierte Programmierung Vertiefung - Java

Test zu Grundlagen der Programmierung Leitung: Michael Hahsler. 21. November 2003

Probeklausur: Programmierung WS04/05

Objektorientierte Programmierung. Kapitel 12: Interfaces

7. Objektorientierte Softwareentwicklung/3. Informatik II für Verkehrsingenieure

Modellierung und Programmierung 1

Javakurs zu Informatik I. Henning Heitkötter

Java Einführung Abstrakte Klassen und Interfaces

5.5.8 Öffentliche und private Eigenschaften

Programmieren in C. Macros, Funktionen und modulare Programmstruktur. Prof. Dr. Nikolaus Wulff

Objektorientierung: Klassen und Objekte

Java Einführung VARIABLEN und DATENTYPEN Kapitel 2

5 DATEN Variablen. Variablen können beliebige Werte zugewiesen und im Gegensatz zu

Programmierkurs Java

Wintersemester Maschinenbau und Kunststofftechnik. Informatik. Tobias Wolf Seite 1 von 22

3 Objektorientierte Konzepte in Java

Pakete dienen dazu, die Software eines Projektes in größere inhaltlich zusammengehörige Bereiche mit eigenem Namen einzuteilen (siehe Java API).

Das Typsystem von Scala. L. Piepmeyer: Funktionale Programmierung - Das Typsystem von Scala

Einführung Datentypen Verzweigung Schleifen Funktionen Dynamische Datenstrukturen. Java Crashkurs. Kim-Manuel Klein

Diana Lange. Generative Gestaltung Operatoren

Eine Klasse beschreibt Objekte mit gleichen Attributen und Methoden.

Vorkurs Informatik WiSe 15/16

Prüfungszeuch im Fach Objektorientierte Programmierung WS 2000

5.4 Klassen und Objekte

II. Grundlagen der Programmierung. 9. Datenstrukturen. Daten zusammenfassen. In Java (Forts.): In Java:

Einfache Arrays. Annabelle Klarl. Einführung in die Informatik Programmierung und Softwareentwicklung

Große Übung Praktische Informatik 1

GetName(), GetName(), GetGeschlecht() und AelterWerden().

Algorithmen und Datenstrukturen

Klassenbeziehungen & Vererbung

Java Kurs für Anfänger Einheit 5 Methoden

Objektorientiertes JavaScript

Universität Augsburg, Institut für Informatik Sommersemester 2005 Prof. Dr. Werner Kießling 16. Juli 2005 Dr. Alfons Huhn, Timotheus Preisinger

Institut für Programmierung und Reaktive Systeme 25. August Programmier-Labor Übungsblatt. int binarysearch(int[] a, int x),

Software-Engineering Grundlagen des Software-Engineering

Es sollte die MS-DOS Eingabeaufforderung starten. Geben Sie nun den Befehl javac ein.

1 Vom Problem zum Programm

Software Engineering. Zur Architektur der Applikation Data Repository. Franz-Josef Elmer, Universität Basel, HS 2015

Einführung in die Programmierung

Kapitel 6. Vererbung

Fachgebiet Informationssysteme Prof. Dr.-Ing. N. Fuhr. Programmierung Prof. Dr.-Ing. Nobert Fuhr. Übungsblatt Nr. 6

1. Formulieren Sie den Algorithmus <Bedienung eines Getränkeautomaten> nach den oben genannten Kriterien.

Objektorientierte Programmierung

Programmieren Tutorium

Der Aufruf von DM_in_Euro 1.40 sollte die Ausgabe 1.40 DM = Euro ergeben.

Prinzipien Objektorientierter Programmierung

Übungen zu Einführung in die Informatik: Programmierung und Software-Entwicklung: Lösungsvorschlag

Abschnitt 9: Schnittstellen: Interfaces

Klausur zur Einführung in die objektorientierte Programmierung mit Java

II.1.1. Erste Schritte - 1 -

Java 7. Elmar Fuchs Grundlagen Programmierung. 1. Ausgabe, Dezember 2011 JAV7

Einführung in Eclipse und Java

Objektbasierte Entwicklung

Java Kurs für Anfänger LMU SS09 Einheit 1 Javaumgebung

Testklausur 1 zur Vorlesung. Modellierung und Programmierung I. Dr. Monika Meiler Zeit: 60 Minuten

2. Semester, 2. Prüfung, Lösung

Liste Programmieren Java Überblick

Der lokale und verteilte Fall

Java-Schulung Grundlagen

Modul 122 VBA Scribt.docx

Klausur in Programmieren

Software Engineering Klassendiagramme Einführung

Übersicht. Schleifen. Schleifeninvarianten. Referenztypen, Wrapperklassen und API. 9. November 2009 CoMa I WS 08/09 1/15

Graphic Coding. Klausur. 9. Februar Kurs A

Klausurteilnehmer. Wichtige Hinweise. Note: Klausur Informatik Programmierung, Seite 1 von 8 HS OWL, FB 7, Malte Wattenberg.

1. Übung zu "Numerik partieller Differentialgleichungen"

Javakurs für Anfänger

Transkript:

Objektorientiertes Programmieren Programmierung in Java 3. Semester ETM Übung Agenda Organisatorisches Inhalte der Lehrveranstaltung Erstkontakt JAVA DI Elmar Krajnc 2 Elmar Krajnc FB Programmierung und Softwareengineering Email: elmar.krajnc@fh-joanneum.at Termin nach Vereinbarung DI Elmar Krajnc 3 1

Organisatorisches LV Ablauf Vortrag Mitarbeit, Übungen praktische Arbeit Abgaben Beurteilung DI Elmar Krajnc 4 Beurteilung Abgabe von Übungsbeispielen 4 Abgaben (80%) Abgabe am Elearning Server Keine Plagiate (Fremde Packages oder Codeteile kennzeichnen) Mitarbeit Mitarbeit in der LV, Wiederholung, Klausur (20%) Prüfung Nur wenn LV negativ bewertet werden muss DI Elmar Krajnc 5 Inhalte der Lehrveranstaltung Kennenlernen von Java Grundlagen der Objektorientierung Klassen Kapselung Vererbung Polymorphie Vertiefung der Java Kenntnisse Packages Exceptions IO Collections Deploying DI Elmar Krajnc 6 2

Verweise Bücher Gosling, Arnold, Holmes; The Java Programming Language Campione, Walrath, Huml; The Java Tutorial Krüger; Handbuch der Java Programmierung Internet http://java.sun.com/docs/books/tutorial/ http://www.galileocomputing.de/openbook/javainsel7/ http://www.boku.ac.at/javaeinf/jein.html DI Elmar Krajnc 7 Was ist Java Java ist Programmiersprache JAVA wurde von SUN entwickelt und erstmals 1995 vorgestellt. Bekannt durch Einbindung in Web-Browsern (Applets) JAVA Javascript Wichtigste Eigenschaften Plattformunabhängig Objektorientiert Robust Portierbar Ähnliche Syntax wie C oder C++ Umfangreiche Klassenbibliothek DI Elmar Krajnc 8 Was brauchen man um Java-Programme zu erstellen? JAVA Development Kit (JDK) Enthält Software zur Erstellung von Java-Programmen: Java Packages mit entsprechenden Klassen Tools Java Compiler Java Runtime Environment Javadoc Tool Debugger Online-Dokumentation Beschreibung des Application Program Interface (API) Beschreibt Klassen, Eigenschaften und Methoden DI Elmar Krajnc 9 3

JDK Seit Version 1.2 (JAVA 2) gibt es verschieden Editionen von JDKs: Java SE - Java Standard Edition Standardklassen wie I/O, GUI, Collections, Java EE - Java Enterprise Edition Erweitert Java SE für serverseitige Programmierung Bsp: Servlets, Webapplication, EJB,.. Java ME - Java Micro Edition API für mobile Geräte Bsp.: Midlets, Handy-Spiel, Momentane Version Java SE 6 http://java.sun.com/javase/downloads/index.jsp http://java.sun.com/javase/6/docs/api/index.html (Online-Doku) DI Elmar Krajnc 10 Umgebungsvariablen JAVA_HOME = Verzeichnis des JDK z.b.: c:\programme\java JAVA_HOME ist meist nicht zwingend zu setzen PATH Variable muss um das /bin-verzeichnis des JDK erweitert werden <bisheriger Path>;c:\Programme\java\javaSE6\bin Bsp.: Set path=%java_home%\bin;%path% (Windows) PATH=/usr/java/javaSE6/bin:$PATH (LINUX) CLASSPATH Gibt an, in welchen weiteren Verzeichnissen und jar-archiven (neben dem aktuellen Verzeichnis und dem JDK) nach class-files und packages gesucht werden soll. Nur im Spezialfall zu setzen DI Elmar Krajnc 11 Wie funktioniert JAVA? Sourcecode in einem Editor schreiben MyProgram.java Sourcecode kompilieren javac MyProgram.java Es ensteht Bytecode MyProgram.class Bytecode ist plattformunabhängig und wird von der Java Virtual Machine (JVM) interpretiert java MyProgram Das Programm wird ausgeführt DI Elmar Krajnc 12 4

Wie funktioniert JAVA? Wie funktioniert JAVA? JVMs sind für unterschiedlichste Betriebssysteme verfügbar. Die JVM ist Teil des Java Runtime Environment (JRE), welches wiederum Bestandteil des JDK ist. DI Elmar Krajnc 13 Erstes Java-Programm /** * Klasse, die einen Text auf der Konsole ausgibt */ public class HelloWorld { public static void main (String[] args) { System.out.println("Hello World!"); //main //HelloWorld Datei speichern als HelloWorld.java (MUSS gleich lauten wie die Klasse, Achtung Case-sensitive!) javac HelloWorld.java (erzeugt HelloWorld.class) java HelloWorld (Aufruf immer OHNE.class) DI Elmar Krajnc 14 Übungsbeispiel Erstellen von HelloWorld in Java Kompilieren Ausführen DI Elmar Krajnc 15 5

Kommentare in JAVA // Kommentar Compiler ignoriert den Text von // bis zum Ende der Zeile Keine Berücksichtigung vom Javadoc-Tool /* Kommentar */ Compiler ignoriert Text von /* bis */ Keine Berücksichtigung vom Javadoc-Tool /** Kommentar */ Compiler ignoriert Text von /** bis */ Javadoc-Tool nutzt diesen Text um automatische Dokumentation zu generieren Javadoc-Doku: http://java.sun.com/j2se/javadoc/index.jsp DI Elmar Krajnc 16 Dokumentieren mit javadoc spezielle Kommentare zw. /**... */ einfügen auch HTML-Tags möglich zusätzliche @-Marken möglich Bsp.: /** Programm Hallo gibt <i>hallo Welt</i> aus @see #main */ Aufruf: javadoc Hallo.java erzeugt Hallo.html DI Elmar Krajnc 17 Online Dokumentation (API) http://java.sun.com/javase/6/docs/api/ Klassenhierarchie Suche nach bestimmten Klassen Zeigt zugehörige Konstruktoren, Methoden, Eigenschaftsfelder Index aller Felder und Methoden Wenn Klasse nicht bekannt ist Suche nach Felder und Methoden Verlinkung zur detailierten Beschreibung von Klassen, Methoden, DI Elmar Krajnc 18 6

Java-API API-Dokumentation packages Methoden etc. Klassen DI Elmar Krajnc 19 Namenskonventionen Klassen und Interfaces Beginnen mit Großbuchstaben Substantiv Bsp.: HelloWorld, Database, Image Konstante Beginnen mit Großbuchstaben und bestehen aus Großbuchstaben, Underline und Ziffern Bsp.: MAX_USERS Objekte, Methoden, Variablen, Packages Beginnen mit Kleinbuchstaben und bestehen aus Klein- und Großbuchstaben sowie Ziffern Methoden oft als Verb Bsp.: getvalue, openfile, isempty DI Elmar Krajnc 20 Sprachgrundlagen Datentypen und Anweisungen 7

Datentypen Primitive Datentypen Logische Typ boolean (true;false) 1 Byte (b=true;) Zeichentyp char (alle Unicode-Zeichen) 2 Byte (c='a';) Ganzzahlige (integrale) Typen byte 1 byte (b=123;) short 2 Byte (s=-1234;) int 4 Byte (i=5678;) long 8 Byte (l=-34567l;) Fließkommazahlen float 4 Byte (f=234.67f;) double 8 Byte (d=-2345.67;) Objekt-Typen Zeichenketten String (s="abcd";) Alle als Klassen definierten Typen DI Elmar Krajnc 22 Deklaration und Wertzuweisung von Variablen Deklaration (Speicherreservierung) typ name; (int i;) typ name1, name2, name3 (char c1, c2, c3;) Wertzuweisung name = wert; (i = -35;) Wertzuweisung mit Typumwandlung (Casting ( Casting) name = (typ) wert; (c = (char) 7;) Deklaration mit Anfangswertzuweisung typ name = wert; (boolean b = false;) Achtung: Die Deklaration gilt immer nur innerhalb des Bereiches (Klasse, Methode, Block) in dem sie steht. DI Elmar Krajnc 23 Garbage Collector Um die Rückgabe R von Speicher braucht man sich als JAVA-Programmierer nicht zu kümmern. k Das übernimmt der Garbage Collector! GC ist ein Hintergrundprozess, der Speicherplatz von nicht referenzierten Objekten freigibt. Achtung der Zeitpunkt der Rückgabe R ist undefiniert! DI Elmar Krajnc 24 8

Anweisung und Block Jede Anweisung wird mit einem Strichpunkt (;) beendet. Ein Block ist ein Zusammenfassung von Anweisungen, die hintereinander ausgeführt werden. Deklarationen von Variablen innerhalb eines Blockes sind auch nur innerhalb dieses Blockes gültig g und sichtbar! Syntax { Anweisung1; Anweisung2; DI Elmar Krajnc 25 Verzweigung (if ( else) Verzweigungen dienen dazu, bestimmte Programmteile nur beim Eintreten bestimmter Bedingungen auszuführen. Syntax if (logischer Ausdruck) { else { Anweisung1; Anweisung2; Bsp.: if (geschlecht==0) { System.out.println("männlich"); else { System.out.println("weiblich"); Anweisung3; Anweisung4; DI Elmar Krajnc 26 Schleifen Wie in C gibt es auch in JAVA kopf- bzw. fußgesteuerte Schleifen sowie Zählschleifen. while-schleife (kopfgesteuert) while (log. Ausdruck) { Anweisung1; do-schleife (fußgesteuert) do { Anweisung1; while (log. Ausdruck); Bsp.: while (level < 10 ) { Game.play(); oder do { Game.play(); while (level < 10 ); DI Elmar Krajnc 27 9

Schleifen Wie in C gibt es auch in JAVA kopf- bzw. fußgesteuerte Schleifen sowie Zählschleifen for-schleife for (int name=startwert ;log. Ausdruck ; Wertänderung ) { Anweisung1; Bsp.: for (int level=1;level<10;level++){ score=score*level; DI Elmar Krajnc 28 Wichtige Operatoren Arithmetische Operatoren +, -, *, / Modulo %, Inkrement ++, Dekrement -- Vergleichsoperatoren gleich ==, ungleich!= kleiner <, größ ößer > <= kleiner gleich, >= größ ößer gleich Logische Operatoren Logisches NICHT! UND &&, ODER Exklusiv-ODER ^ DI Elmar Krajnc 29 Übungsbeispiele DI Elmar Krajnc 30 10

Übung Potenzen ausrechnen Schreiben Sie eine Applikation, die für ganze Zahlen mit Basis 1 bis 10 die Potenzen mit Exponent 1-5 berechnet und die Ergebnisse wie folgend beschrieben ausgibt: 1 hoch 1 = 1 1 hoch 2 = 1 10 hoch 5 = 100000 Hinweis: Potenzieren in Java mit Methode Math.pow(double basis, double exponent) im Package java.lang.math Vorgangsweise Verwenden Sie folgendes Grundgerüst: public class Ueb2aPotenzen { public static void main(string[] args) { //Variablen deklarieren double basis; //Schleifen Start for (){ //berechnen ergebnis = Math.pow(basis,exponent) //Ausgabe System.out.println() //Schleifen Ende Übung - Zinsenrechner Schreiben Sie ein Programm, das für einen bestimmten Geldwert und Zinssatz berechnet, um welchen Betrag sich der Grundwert jährlich erhöht. Die Laufzeit beträgt 10 Jahre. Geben Sie jeweils Jahr und Zinszuwachs im Vergleich zum Vorjahr aus. Hinweis: Der Geldwert erhöht sich jährlich um den Faktor (100+Zinssatz)/100. Zusatz 1: Geben Sie jeweils nach dem 5. und dem 10. Jahr auch den aktuellen Gesamtbetrag aus. 11

Vorgangsweise Verwenden Sie folgendes Grundgerüst: public class Ueb2bZinsen { public static void main(string[] args) { //Variablen deklarieren int startjahr = 2000; //Schleife Start for (){ //berechnen zuwachs = ; betrag = ; //Ausgabe System.out.println() //Schleife Ende Übung Zinsrechner mögliche Ausgabe Startjahr: 2000 Geldwert: 500.0 Euro Laufzeit: 10 Jahre Zinssatz: 10.0 % 2000: Zuwachs:50.0 2001: Zuwachs:55.0 2002: Zuwachs:60.5 2003: Zuwachs:66.55 2004: Zuwachs:73.205 - Gesamtwert: 805.255 2005: Zuwachs:80.52550000000001 2006: Zuwachs:88.57805 2007: Zuwachs:97.43585499999999 2008: Zuwachs:107.17944049999998 2009: Zuwachs:117.89738454999998 - Gesamtwert: 1296.87123005 Objektorientierte Programmierung mit Java Grundlagen 12

Vorteile der Objektorientierung Natürliche Modellierung vieler Problemstellungen Verminderte Komplexität durch Abstraktion Kapselung Definierten Schnittstellen (Methoden) Erhöhte Effizienz bei der Entwicklung Wiederverwendung von Klassenbibliotheken DI Elmar Krajnc 37 Wichtige Begriffe der OOP (1) Klasse: allgemeine Beschreibung für ein Objekt; Bauplan ; Vorlage, z.b. Kochrezept Objekt: konkretes Ding, z.b. meinesachertorte, originalsachertorte originalsachertorte meinesachertorte DI Elmar Krajnc 38 Wichtige Begriffe der OOP (2) Eigenschaft (field ( field): Merkmal, z.b. Farbe, Größe,... Wie ist ein Objekt beschaffen? Methode (method ( method): Aktion, z.b. set Farbe(), berechnebackzeit(),... Was kann ein Objekt tun? Ereignis (event ( event): Zustand, der eintreten kann, z.b. Backofen zu heiss, Backzeit abgelaufen,... Worauf kann ein Objekt reagieren? DI Elmar Krajnc 39 13

Beispiel: DVD-Player KLASSE OBJEKT 1 OBJEKT 2 Eigenschaften bezeichnung farbe abmessungen mp3abspielbar Methoden play() skip() eject() isplaying() setlanguage(string lang) getfarbe() setfarbe(string col) Eigenschaften Sony silber 30x30x13 true Methoden play() skip() eject() isplaying() setlanguage("de") getfarbe() setfarbe("rot") Eigenschaften Panasonic schwarz 34x29x15 true Methoden play() skip() eject() isplaying() setlanguage("en") getfarbe() setfarbe("blau") DI Elmar Krajnc 40 Zugriff auf Instanzvariablen und Methoden Der Zugriff auf Variablen und Methoden erfolgt über das instanzierte Objekt Nach dem Objekt trennt ein Punkt die nachfolgende Instanzvariable oder Methode Klasse Objekt Konstruktor DVDPlayer sony=new DVDPlayer(); sony.bezeichnung="sony DVD 402"; Objekt sony.play(); Punkt als Trennzeichen Instanzvariable Objekt Punkt als Trennzeichen Methode DI Elmar Krajnc 41 Konstruktor ist eine spezielle Methode, die beim Instanzieren aufgerufen wird Instanzieren: Erzeugen eines Objekts mit new-operator Bsp: Klasse Objekt Konstruktor Torte meinetorte=new Torte(); Torte meinetorte=new Torte("Sacher"); oder: DVDPlayer sony=new DVDPlayer(); DI Elmar Krajnc 42 14

Wichtige Eigenschaften der OO Abstraktion Unterscheidung Bauplan und Umsetzung Wer weiß wie ein Lichtschalter funktioniert, kann alle ähnlichen Lichtschalter bedienen Kapselung Objekte können Attribute und Methoden verbergen Zugriff von außen wird geschützt DI Elmar Krajnc 43 Wichtige Eigenschaften der OO Vererbung Elternklasse (Superklasse) vererbt Eigenschaften und Attribute an Kindklasse (Subklasse) Hierarchische Beziehung Polymorphismus (Vielgestaltigkeit) Subklassen können als Instanz der Superklasse behandelt werden Bsp: Klasse Transportmittel ist Superklasse der Subklassen Moped und Auto. Eine Instanz der Klasse Auto kann auch als Instanz der Klasse Transportmittel behandelt werden. DI Elmar Krajnc 44 Objektorientierte Programmierung mit Java Klassen 15

Klassen Bauplan für (ähnliche) Objekte Beschreibung der Eigenschaften und Methoden die ein Objekt erhält Objekte (Instanzen) werden aus Klassen erzeugt Instanz 1 Instanz 2 Instanz 3 DI Elmar Krajnc 46 Definieren einer Klasse Festlegen von geeigneten Klassen und deren Eigenschaften und Methoden in der Problemanalyse Implementierung in den Sourcecode KlassenName Eigenschaften Class KlassenName { eigenschaftdeklaration; Methoden() methodendeklaration; Problemanalyse Klassendiagramm Implementierung Sourcecode DI Elmar Krajnc 47 Bsp.: Klasse Punkt definieren Festlegen von geeigneten Klassen und deren Eigenschaften und Methoden in der Problemanalyse Implementierung der Festlegung in den Sourcecode Klassendiagramm Punkt int x int y Punkt() draw() Sourcecode class Punkt { //attributdeklaration int x; int y; //methodendeklaration; //Konstruktor void Punkt(int x, int y){ void draw(){ DI Elmar Krajnc 48 16

Objekte Instanzieren Instanzieren Objekt einer Klasse erzeugen = Neues Objekt wird Schlüsselwort new erzeugt Klassenname objektname = new Klassenname([Initialisierungswerte]); Bsp: Punkt nullpunkt = new Punkt(0,0); Jede erzeugte Instanz ist eindeutig und besitzt eigene Kopien der Eigenschaften (Variablen). Diese Variablen werden daher auch Instanzvariablen genannt. DI Elmar Krajnc 49 Instanzvariablen Eigenschaften eines Objektes werden in Instanzvariablen gespeichert Alle Objekte einer Klasse haben die selben Instanzvariablen (selber Datentyp je Variable, selbe Anzahl von Variablen) Datentyp und Name der Variable werden in der Klasse deklariert Zugriff auf den Inhalt der Variable erfolgt über Objektnamen und Variablennamen, die durch einen Punkt getrennt sind nullpunkt.x=0; nullpunkt.y=0; Der Wert einer Variable kann während der Laufzeit verändert werden Instanzvariablen werden am Beginn der Klassendefinition definiert DI Elmar Krajnc 50 Klassenvariablen (statische Variablen) Klassenvariablen werden von allen Objekten einer Klasse geteilt. Alle Instanzen einer Klasse greifen auf die selben Klassenvariablen zu Klassenvariablen sind auch dann verfügbar, wenn noch keine Instanz der Klasse erzeugt wurde Deklaration: static typ name; Bsp.: static int count; count zählt hier beispielsweise die Anzahl der erzeugten Objekte der Klasse Punkt. Zugriff auf Klassenvariable über Klassenname und Variablenname getrennt durch einen Punkt. Punkt.count++; DI Elmar Krajnc 51 17

Standardvariable "this " this" this ist eine Referenz zum aktuellen Objekt this ist eine Referenz auf die aktuelle Instanz der Klasse in der man sich gerade befindet. Über this kann auf alle Variablen und Methoden der Instanz zugegriffen werden. public class Person { private String name; public setname (String name){ this.name=name; //bei Namensgleichheit von Parameter und Variable "this" verwenden DI Elmar Krajnc 52 Konstruktoren Jede Klasse benötigt einen oder mehrere Konstruktoren. Konstruktoren: reservieren den Speicherplatz für eine neu zu erzeugende Instanz, weisen den Instanzvariablen initiale Werte zu, haben denselben Namen wie die Klasse, werden wie Methoden deklariert, aber immer ohne Rückgabewert KlassenName(Parameter){.. Zu einer Klasse können mehrere Konstruktoren mit verschiedenen Parametern deklariert werden. DI Elmar Krajnc 53 Bsp. Konstruktor class Student { private String matrnr; private String name; private int semester; //Konstruktor Student(String name, String nr) { this.name = name;//this = aktuelles Objekt matrnr = nr; Instanzvariable Übergabeparameter Anwendung: Student stundent1 = new Student("Max Muster", "1042013"); DI Elmar Krajnc 54 18

Default-Konstruktor Wenn kein Konstruktor erstellt wurde, wird defaultmäßig ein Konstruktor (ohne Parameter) erzeugt. void Student(){ Student s2 = new Student(); DI Elmar Krajnc 55 Objektorientierte Programmierung mit Java Methoden Methoden Methoden definieren das Verhalten von Objekten werden innerhalb der Klassendefinition angelegt habe Zugriff auf alle Eigenschaften des Objektes können mit Funktionen in anderen Programmiersprachen verglichen werden DI Elmar Krajnc 57 19

Main-Methode Methode Ist der Startpunkt einer jeden JAVA-Applikation (im Gegensatz zu z.b. Applets) Die main-methode ist eine Klassenmethode (static). Der Start der Applikation erfolgt ohne Instanzierung einer Klasse Der Java-Interpreter sucht beim Starten der Applikation nach der main-methode. Wird keine gefunden, so gibt es einen Laufzeitfehler String-Array übergibt Komandozeilenparameter als Argument an die main-methode Sichtbarkeit öffentlich Klassenmethode Übergabeparameter public static void main (String[ ] args){ Kein Rückgabewert erwartet DI Elmar Krajnc 58 Main-Methode Methode Übergabeparameter verwenden public class ParameterUebergabe{ public static void main (String[] args){ String param1 = args[0]; System.out.println("Param 1 lautet: "+param1); Aufruf: java ParameterUebergabe Hallo DI Elmar Krajnc 59 Deklaration von Methoden Methoden haben einen Bezeichner (Namen) wie Variablen haben ev. einen oder mehrere Übergabeparameter haben ev. einen Rückgabewert public void printmaximum(int a, int b) { if (a>b) { System.out.println(a); else { System.out.println(b); Signatur DI Elmar Krajnc 60 20

Aufruf von Methoden Aufruf durch Angabe von Bezeichner und Parameter public static void main(string[] args) { int x = 5; int y = 3; obj.printmaximum(x,y); public void printmaximum(int a, int b) { if (a>b) { System.out.println; Beim Aufruf werden den Parametern a und b der Methode die Werte x und y übergeben. a und b können nur innerhalb der Methode printmaximum verwendet werden. Es gibt keinen Rückgabewert (Schlüsselwort void). DI Elmar Krajnc 61 Deklaration von Methoden mit Rückgabewert R public int maximum(int a, int b) { if (a>b) { return a; else { return b; Der Rückgabewert soll vom Typ int sein return legt den Rückgabewert fest und beendet die Methode Sämtliche Datentypen können als Rückgabewert verwendet werden DI Elmar Krajnc 62 Aufruf von Methoden mit Rückgabewert R Aufruf durch Angabe von Bezeichner und Parameter public static void main(string[] args) { int x = 5; int y = 3; int max = obj.maximum(x,y); public int maximum(int a, int b) { if (a>b) { return x; Der Rückgabewert wird als Ergebnis der Methode maximum(x,y) der Variable max zugewiesen. DI Elmar Krajnc 63 21

Objektorientierte Programmierung mit Java Beispiel "objektorientiertes HelloWorld" Altes Hello World Alles in main-methode objektorientiertes HelloWorld Klasse Hello Konstruktor, Felder, Methoden Klasse Main Instanzierung eines Objekts Aufruf von Methoden DI Elmar Krajnc 65 Neues Design im Klassendiagramm Klasse Eigenschaften Methoden Main main() Hello name greets DI Elmar Krajnc 66 22

Beispiel Objektorientierung DI Elmar Krajnc 67 Objektorientierte Programmierung mit Java Gültigkeitsbereich - Scope Gültigkeitsbereich In Java gibt es 4 Einstellungen die den Gültigkeitsbereich von Variablen, Methoden und Klassen regeln. private protected public package (Standard) Gültigkeitsbereich bedeutet: Welche (anderen) Objekte dürfen auf eine Klasse bzw. Variablen und Methoden der programmierten Klasse zugreifen. Grundsätzlich können alle Variablen und Methoden innerhalb der Klasse, in die sie geschrieben sind, aufgerufen werden. DI Elmar Krajnc 69 23

Gültigkeitsbereich private Methoden oder Variablen können nur innerhalb der eigenen Klasse verwendet werden package (Standard) Methoden oder Variablen können innerhalb des ihres Paketes verwendet werden. Pakete sind Sammlungen von zusammengehörigen Klassen. protected Wie package, aber zusätzlich können abgeleitete Klassen in anderen Paketen diese Variablen und Methoden verwenden public Methoden und Variablen sind generell verwendbar. DI Elmar Krajnc 70 Gültigkeitsbereich Beispiel public class Person { private String name; public setname (String n){ name=n; public class Firma { public static void main(string[] args){ Person mitarbeiter = new Person(); mitarbeiter.name ="Meier"; //funktioniert nicht, da name = private mitarbeiter.setname("meier"); //funktioniert, da setname = public DI Elmar Krajnc 71 Wichtige Eigenschaften der Objektorientierung Abstraktion Unterscheidung Bauplan und Umsetzung Wer weiß wie ein Lichtschalter funktioniert, kann alle ähnlichen Lichtschalter bedienen Kapselung Objekte können k Attribute und Methoden verbergen Zugriff von außen wird geschützt Vererbung Elternklasse (Superklasse) vererbt Eigenschaften und Attribute an Kindklasse (Subklasse) Hierarchische Beziehung Polymorphismus (Vielgestaltigkeit) Subklassen können als Instanz der Superklasse behandelt werden Bsp: Klasse Transportmittel ist Superklasse der Subklassen Moped und Auto. Eine Instanz der Klasse Auto kann auch als Instanz der Klasse Transportmittel behandelt werden. DI Elmar Krajnc 72 24

Kapselung - Information Hiding kein direkter Zugriff auf Variablen (Attribute) einer Klassen Zugriff erfolgt über Methoden (getter, setter-methoden) public class Person { private String name; public setname (String n){ name=n; public String getname (){ return name; public class Firma { public static void main(string[] args){ Person mitarbeiter = new Person(); mitarbeiter.name = "Meier"; //funktioniert nicht, da name = private mitarbeiter.setname("meier"); //funktioniert, da setname = public String tischler = mitarbieter.getname(); DI Elmar Krajnc 73 Kapselung Allgemein gilt: Instanzvariablen repräsentieren den Zustand eines Objektes Methoden repräsentieren das Verhalten eines Objektes Methoden sind definierte Schnittstellen und bilden die einzige Möglichkeit um mit dem Objekt zu kommunizieren, d.h. Informationen über Zustand erhalten (Instanzvariablen lesen) Zustand verändern (Instanzvariablen ändern) Die als private deklarierten Instanzvariablen eines Objekts sind vor unkontrolliertem Zugriff außerhalb der eigenen Klassendefinition geschützt bzw. abgekapselt. Nur über definierte, öffentliche Schnittstellen (public Methoden) kann darauf zugegriffen werden DI Elmar Krajnc 74 Vorteile Kapselung Die Implementierung der Daten kann verändert werden, ohne dass Programmcode außerhalb der Klasse geändert werden muss. Der Zugriff auf die verschiedenen Variablen kann eingeschränkt werden. Dies verhindert sowohl Datenmanipulationen als auch irrtümliche Veränderung oder Abfrage der Daten. Außerdem können damit Programmierfehler eingeschränkt werden. Die Komplexität bei der Bedienung eines Objektes wird reduziert Bsp.: Fernseher Technisch komplizierter innerer Aufbau (= viele Instanzvariablen) einfache Schnittstelle zum Bedienen (z.b. Ein/Ausschalter) DI Elmar Krajnc 75 25

Objektorientierte Programmierung mit Java Klasse String, Arrays Klasse String Deklaration einer Objekt-Variablen: String name; // es wird noch kein Speicherplatz für das Objekt reserviert! Anlegen eines Objektes (Instanz) dieser Klasse: name = new String(); // Reservierung von Speicherplatz name = "Maier"; auch möglich: String name = new String("Maier"); bewusstes Zerstören eines Objekts: name = null; // der vom Objekt belegte Speicherplatz wird vom Garbage-Collector frei gegeben DI Elmar Krajnc 77 Wichtige String-Methoden int length(): aktuelle Länge char charat(int index): liefert das Zeichen an der Position index String substring(int beginn, int ende): liefert einen Teilstring boolean equals(object o), boolean equalsignorecase(string s), int compareto(string s): vergleicht 2 Strings int indexof(string s): sucht das erste Vorkommen von s innerhalb des String-Objekts String tolowercase(), String touppercase(): Umwandlung in Klein-/ Großbuchstaben DI Elmar Krajnc 78 26

Arrays in Java: Deklaration, Initialisierung, Zugriff In Java ein Objekt int[] gewicht = new int[10]; //index 0 bis 9 oder alternativ float[] temp = {12.3f, -1.5f, 8f; Zugriff auf Elemente über Index gewicht[0]=72; gewicht[9]=83; Anzahl der Elemente über Instanzvariable length System.out.println(gewicht.length); // 10 Achtung hier nicht length()! DI Elmar Krajnc 79 Objektorientierte Programmierung mit Java Übung Objektorientierte Programmierung mit Java Überladen von Methoden 27

Overloading - Überladen von Methoden Methoden innerhalb einer Klasse dürfen den gleichen Namen haben, WENN sie sich durch ihre Parameter Art Anzahl unterscheiden. Der Rückgabetyp und Parametername tragen NICHT zur Unterscheidung von Methoden bei! private void print(int a, int b) { private void print(int a) { private void print(double a) { private void print(int b) { //Fehler, gleich wie Methode 2 private int print(int a, int b) { //Fehler, gleich wie Methode 1 DI Elmar Krajnc 82 Aufruf überladener Methoden class MaxProgramm { int maximum (int x, int y) { if (x>y) { return(x); else { return(y); int maximum (int x, int y, int z) { int max; max = maximum(z, maximum(x,y)); return max; public static void main (String[] arg) { System.out.println(maximum(45,13,98)); Die richtige Methode wird über die Signatur automatisch gewählt. DI Elmar Krajnc 83 Objektorientierte Programmierung mit Java Packages 28

Wozu gibt es Packages? Einbinden von bereits programmiertem Code Wiederverwendung von vorhandenen Klassen deren Implementierung man kennt deren Implementierung man nicht kennt DI Elmar Krajnc 85 Was sind Packages? Packages sind Sammlungen von funktional zusammen gehörenden Klassen und dienen als Strukturelement oberhalb der Klassenebene Jede Klasse in Java ist Bestandteil genau eines Packages Viele Packages werden bereits mit der Java-Plattform mitgeliefert API (Application Program Interface) ist eine Sammlung von zusammengehörenden Packages Package-Namen können aus mehreren Teilen und beliebig tiefen Hierarchien bestehen Package.Klasse.Methode() od. Variable Bsp.: java.lang.math.sqrt(); DI Elmar Krajnc 86 Vorteile von Packages Systematische Ordnung, wenn viele Klassen verwendet werden Gleichnamige Klassen in unterschiedlichen Packages können eindeutig zugeordnet und verwendet werden (Namespaces) FHJoanneum.Person und IhreFirma.Person sind verschiedene Klassen aber durch unterschiedliche Packages spielt gleicher Klassenname keine Rolle Definition klarer public-klassen und Methoden, die auch von Klassen externer Packages eingebunden werden können DI Elmar Krajnc 87 29

Package erstellen Alle Klassen, die zu einem Package gehören, müssen im gleichen Verzeichnis gespeichert werden und müssen mit package packagename beginnen //Beispiel Datei mypackage/myclass.java package mypackage; public class MyClass { Neues Package mit Eclipse erstellen Rechter Mausklick auf Projekt New -> Package DI Elmar Krajnc 88 Packages verwenden Packages müssen entweder explizit oder implizit importiert werden //Beispiel explizite Importanweisung import mypackage.*; MyClass meineneueklasse = new MyClass(); //Beispiel implizite Importanweisung mypackage.myclass meineneueklasse = new mypackage.myclass(); DI Elmar Krajnc 89 Packages verwenden Einbinden des gesamten Paketes import java.util.*; Date d = new Date(); // steht zur Verfügung Vector v = new Vector(); // steht zur Verfügung Einbinden einzelner Klassen aus einem Paket import java.util.date; Date d = new Date(); // steht zur Verfügung Vector v = new Vector(); // steht nicht zur Verfügung DI Elmar Krajnc 90 30

Eigene Pakete öffentlich zur Verfügung stellen Klassen und Methoden die außerhalb des Packages verwendet werden sollen, müssen als public deklariert sein. Namenskonvention für weltweite eindeutige Nutzung Package-Pfad ist umgekehrter Domain-Name des Klassenerzeuger Beispiel: at.fhjoanneum.swd05.meinpackage muss in folgender Verzeichnisstruktur abgelegt werden: at/fhjoanneum/swd05/meinpackage/ DI Elmar Krajnc 91 Einige Java Standard Packages java.lang // keine import-anweisung nötig, da immer impliziter Import java.io // Eingabe-Ausgabe java.util // einige nützliche Klassen (Random, Date, Vector) java.net // Netzwerkprogrammierung java.awt // GUI- und Grafikprogrammierung Weitere Information zu Standard-Packages siehe Spezifikation zur Java-API! DI Elmar Krajnc 92 Spezialfall java.lang Das Package java.lang wird immer implizit importiert beinhaltet Klassen wie: String Math System Beispiel: System.out.println(String); System ist eine Klasse im Package java.lang out ist eine statische Variable von System vom Typ PrintStream In der Klasse PrintStream ist die Methode println(string) definiert DI Elmar Krajnc 93 31

Beispiel : Klasse Konsole Überladen der Methoden Erstellen des Packageetm07.util Einbinden des Packages in andere Klassen DI Elmar Krajnc 94 Objektorientierte Programmierung mit Java Vererbung Wichtige Eigenschaften der Objektorientierung Abstraktion Unterscheidung Bauplan und Umsetzung Wer weiß wie ein Lichtschalter funktioniert, kann alle ähnlichen Lichtschalter bedienen Kapselung Objekte können Attribute und Methoden verbergen Zugriff von außen wird geschützt Vererbung Elternklasse (Superklasse) vererbt Eigenschaften und Attribute an Kindklasse (Subklasse) Hierarchische Beziehung Polymorphismus (Vielgestaltigkeit) Subklassen können als Instanz der Superklasse behandelt werden Bsp: Klasse Transportmittel ist Superklasse der Subklassen Moped und Auto. Eine Instanz der Klasse Auto kann auch als Instanz der Klasse Transportmittel behandelt werden. DI Elmar Krajnc 96 32

Vererbung Vererbung ist eine der Grundideen der Objektorientierung Kindklassen (Subklassen) erben dabei sämtliche Variablen und Methoden der Elternklasse (Superklasse) Einfachvererbung Mehrfachvererbung In Java gibt es nur Einfachvererbung, keine Mehrfachvererbung. Eine Kindklasse kann also nur von einer Elternklasse erben. DI Elmar Krajnc 97 Klassendiagramm Vererbung erben alle Variablen und Methoden der Elternklasse und besitzen zusätzlich weitere Eigenschaften und Methoden Transportmittel baujahr: int vmax: int bezeichnung: String printinfo() Klasse Transportmittel enthält gemeinsame Variablen und Methoden Auto anztueren:int hatabs:boolean getanztueren()() Schiff anzkabinen:int bauart: String getbauart() Flugzeug maxflughoehe: int spannweite: double getspannweite() DI Elmar Krajnc 98 Implementierung der Elternklasse public class Transportmittel { // Instanzvariablen private int baujahr; private int vmax; private String bezeichnung; Transportmittel baujahr: int vmax: int bezeichnung: String printinfo() // Konstruktor Transportmittel (int bauj, int vmax, String bez){ // Methoden public void printinfo(){ System.out.println("Baujahr: "+baujahr); System.out.println("maximale Geschw.: "+vmax); System.out.println("Bezeichnung: "+bezeichnung); DI Elmar Krajnc 99 33

Implementierung der abgeleiteten Klasse Auto erbt alle Eigenschaften von Transportmittel und erweitert die Eigenschaften und Methoden Auto anztueren:int hatabs:boolean printinfo() public class Auto extends Transportmittel { private int anztueren; private boolean hatabs; // Konstruktor Auto (int bauj, int anztuer, String bez, boolean abs){ public void printinfo(){ DI Elmar Krajnc 100 Überschreiben (Overriding ( Overriding) ) von vererbten Methoden erbt alle Eigenschaften von Transportmittel, erweitert die Eigenschaften und überschreibt die Methode printinfo() Auto anztueren:int hatabs:boolean printinfo() public class Auto extends Transportmittel { private int anztueren; public void printinfo(){ private boolean hatabs; System.out.println("Baujahr: "+baujahr); System.out.println("maximale Geschw.: "+vmax); // Konstruktor System.out.println("Bezeichnung: Auto (int bauj, ){ "+bezeichnung); public void printinfo(){ super.printinfo(); // Methode in Klasse Transportmittel System.out.println("Tueren: "+anztueren); Mit Hilfe des Ausdrucks super wird auf die Elternklasse referenziert DI Elmar Krajnc 101 Instanzierung einer abgeleiteten Klasse // Konstruktor Elternklasse (Baujahr, max.geschw., Bez) Auto ford = new Auto (1978,170,"Ford Taunus"); // Konstruktor abgel. Klasse (Baujahr,AnzTüren,Bez., ABS?) Auto audi = new Auto (2002,5,"Audi A4",true); // Konstruktor der Superklasse mit Argumenten aufrufen public class Auto extends Transportmittel { // Konstruktor Auto (int bauj,int v, int anztuer, String bez, boolean abs){ super(bauj,v,bez+", "+anztuer+"-tuerig"); // muss 1. Zeile sein public class Transportmittel { // Konstruktor Transportmittel (int bauj, int vmax, String bez) { DI Elmar Krajnc 102 34

Übung Erstellen einer Superklasse Fahrzeug Erstellen von 2 abgeleiteten Klassen Auto und Flugzeug DI Elmar Krajnc 103 Objektorientierte Programmierung mit Java Vererbung (Fortsetzung) Polymorphismus Oft ist bekannt welche abgeleite Klasse verwendet werden soll Ist ein Programm in der Lage mit Instanzen einer Superklasse zu arbeiten, so kann es auch mit Instanzen der Subklassen arbeiten. Das bedeutet: jedes Programm, das mit Transportmittel arbeiten kann, kann auch mit Auto, Schiff oder Flugzeug arbeiten, da es die Methoden und Variablen von Transportmittel kennt. DI Elmar Krajnc 105 35

Kompatibilität t zwischen Sub- und Superklasse Wegen der Kompatibilität kann eine Instanz der Subklasse auch einer Superklassenvariablen zugewiesen werden (up-casting) Transportmittel airbus = new Flugzeug(); //airbus ist ein Flugzeug, sieht aber wie ein Transportmittel aus Klassentyp prüfen if ( airbus instanceof Flugzeug) { Umwandeln auf original Klassentyp Flugzeug a380 = (Flugzeug) airbus; //casting DI Elmar Krajnc 106 Problem up-casting Welche Methoden werden verwendet? Probleme Methode in Subklasse wird überschrieben Instanz der Subklasse wird in einer Superklassen-Variable gespeichert = up-casting Frage: Welche Methode wird verwendet? Transportmittel Antwort: Die Methode des erzeugten Typs wird ausgeführt Dynamische Bindung baujahr: int vmax: int bezeichnung: String printinfo() Transportmittel airbus = new Flugzeug(); airbus.printinfo(); Flugzeug maxflufhoehe: int spannweite: double printinfo() Auto anztueren:int hatabs:boolean printinfo() DI Elmar Krajnc 107 Attribut final final + primitiver Datentyp Der Wert der "Variablen" bleibt konstant = KONSTANTE final int MAX_VALUE = 100; final + Objekt-Datentyp Die Referenz bleibt konstant final Nummer n1 = new Nummmer(1); Nummer n2 = new Nummer(15); n1=n2; //funktioniert nicht, da für n1 keine neue Referenz erlaubt ist. final + Parameter Der Parameter ist in der Methode unveränderbar public void setbetrag ( final double zinsen){ zinsen = zinsen * 5; // nicht OK, da kein neuer Wert für zinsen erlaubt ist DI Elmar Krajnc 108 36

Attribut final final + Methode Verhindert das Überschreiben der Methode durch eine Subklasse. Anwendungsgründe: Sicherheit oder Effizienzsteigerung (kein dyn. Binden) public class Transportmittel { public final String getbezeichnung(){ final + Klasse Eine Vererbung dieser Klasse ist nicht möglich. Anwendungsgründe: Sicherheit od. Effizienz soll erhöht werden. Methoden einer final definierten Klasse sind ebenfalls implizit als final definiert. final class Transportmittel { public class Moped extends Transportmittel{ //Anweisung ist nicht erlaubt DI Elmar Krajnc 109 Objektorientierte Programmierung mit Java Interfaces und Abstrakte Klassen Mehrfachvererbung Mehrfachvererbung bedeutet, dass ein Subklasse von zwei oder mehreren Superklassen abgeleitet wird. Bsp. ein Fussball ist ein Sportgerät und eine Kugel Java unterstützt grundsätzlich KEINE Mehrfachererbung Schlüsselwort extends kann nur eine Klasse weitervererben eine Klasse kann aber mehrere Interfaces implementieren DI Elmar Krajnc 111 37

Interfaces Ein Interface ist eine spezielle Form einer Klasse bietet die Möglichkeit eine einheitliche Schnittstelle zu definieren enthält nur die Signatur von Methoden (nicht ausprogrammiert) und Konstanten Die Methoden sind implizit public Keine Definition von Konstruktoren erlaubt DI Elmar Krajnc 112 Definition eines Interfaces //Definition interface Kugel { // Konstante static final double pi = 3.14; //autom. static und final //Methode public double getvolume(); //autom. public, KEINE Implementierung DI Elmar Krajnc 113 Implementierung eines Interfaces //Implementierung class Fussball implements Kugel { public double getvolueme(){ //volumen berechnen return volume; Der Compiler prüft, ob alle Methoden des Interfaces implementiert wurden. //Implementierung und Vererbung class Fussball extends MySuperClass implements Kugel { DI Elmar Krajnc 114 38

Mehrfachimplementierung von Interfaces //Mehrfachimplementierung class MyClass implements MyInterface1, MyInterface2,... { public double gethoehe(){ return hoehe; Der Compiler prüft, ob alle Methoden des Interfaces implementiert wurden.... //alle Methoden der Interfaces MÜSSEN implementiert werden //Mehrfachimplementierung und Vererbung class MyClass extends MySuperClass implements MyInterface1, MyInterface2 { DI Elmar Krajnc 115 Abstrakte Klassen sind eine Mischung aus Superklasse und Interface bietet, genau wie bei Interfaces, die Möglichkeit eine einheitliche Schnittstelle zu definieren enthält neben ausprogrammierten Methoden auch Signaturen von Methoden die in der abgeleiteten Klasse programmiert werden müssen Wird in einer Klasse für mindestens eine Methode nur die Signatur definiert (=abstrakte Methode), so muss die gesamte Klasse als abstrakt definiert werden Abstrakte Klassen können nicht instanziert werden Alle abstrakten Methoden müssen in den Subklassen implementiert werden DI Elmar Krajnc 116 Definition und Implementierung von abstrakten Klassen //Definition abstract class MyAbstractClass { void normalemethode (int i){ //Programmcode abstract void abstraktemethode(int a); //Implementierung class NeueKlasse extends MyAbstractClass { void abstraktemethode(int a){ //wird jetzt programmiert DI Elmar Krajnc 117 39