Ü B U N G S F R A G E N ----------------------- 1. Klasse 1. Was ist der Unterschied zwischen einer Klasse und einem Objekt? 2. Was sind die zwei prinzipiellen Gruppen von Bestandteilen innerhalb einer Klasse? 3. Verfügen alle Objekte einer Klasse über dieselben Attribute und Methoden? 4. Was unterscheidet die Objekte eindeutig voneinander, ihr Inhalt oder ihr Name? 5. Durch welche zwei Schritte werden Objekte in Java erzeugt? 6. In welchem Speicherbereich liegt die Referenzvariable und in welchem liegt das Objekt? 7. Ab welchem Zeitpunkt ist das Objekt tatsächlich vorhanden? 8. Mit welcher speziellen Methode kann in den Erzeugungsprozess eines Objektes eingegriffen werden? 9. Was sind deren wichtigste Merkmale ? 10. Sind die Attribute eines Objekts automatisch initialisiert? 11. Wieviele Konstruktoren darf es in einer Klasse geben? 12. Worin müssen diese sich unterscheiden? 2. Attribute und Methoden 1. Welches ist die Zugriffs-Voreinstellung (ohne Bezeichner) in einer Java-Klasse? 2. Wodurch unterscheidet sich ein static-Attribut von einem nicht-static-Attribut? 3. Welches ist der Zugriffsoperator in Java? 3. Datentypen 1. Wodurch unterscheidet sich eine Objektvariable (Attribut) von einer normalen lokalen Variablen in einer Klasse? 2. Mit welchem Schlüsselwort werden Konstanten in Java gekennzeichnet? 3. Welche zwei grundsätzlichen Arten von Datentypen unterscheidet man in Java? 4. Zu welchem Datentyp gehören Vektoren ? 5. Wie wird ein Vektor erzeugt und was ist dabei zu beachten? 6. Muss die Länge (Anzahl der Elemente) eines Vektors bei seiner Erzeugung angegeben werden? 7. Wie lautet die Methode, die die Länge eines Vektors ermittelt? 8. Wird bei der Zuweisung von Objektdatentypen mit = deren Inhalt kopiert oder nicht? 9. Was geschieht bei der Anwendung des Vergleichsoperators auf Objekte? 10. Mit welcher Methode kann ein Buchstabe in einem String durch einen anderen Buchstaben ersetzt werden? 4. Methoden 1. Welches sind die zwei Hauptaufgaben von Java-Methoden ? 2. Welches sind die Hauptunterschiede zu C-Funktionen? 3. Wann kann aus einer Methode heraus eine Methode in einer anderen Klasse aufgerufen werden? 4. Was versteht man unter der Signatur einer Methode? 5. Unter welchen Umständen darf in Java eine void-Methode ein return enthalten? 6. Unter welchen Umständen darf es in Java gleichnamige Methoden geben? 5. Klassenbeziehungen (Assoziation) 1. Welche zwei Arten von Assoziationen unterscheidet man? 2. Wodurch wird eine Assoziation zwischen zwei Klassen hergestellt? 3. Mit welchem Operator wird auf ein assoziiertes Objekt zugegriffen? 4. Durch was für einen Datentyp wird eine Mehrfach-Assoziation abgebildet? 5. Kommentieren Sie folgendes Programmstück (bei 1, 2, 3): class Kunde { private Adresse adr; private Rechnung[] rechnungen; // 1: // Konstruktor public Kunde() { this.adr = new Adresse(); this.rechnungen = new Rechnung[3]; // 2: for (int i=0; i < rechnungen.length; i++) rechnungen[i] = new Rechnung(); // 3: } } // end Kunde Klassenvererbung 1. Was bedeutet Vererbung? 2. Nennen Sie praktische Vorteile, die sich aus der Vererbung ergeben. 3. Wieviele direkte Elternklassen kann eine Kindklasse haben? 4. Wieviele Kindklassen kann eine Elternklasse haben? 5. Was erbt die Kindklasse von der Elternklasse? 6. Besitzt die Elternklasse alle Attribute und Methoden der Kindklasse? 7. Kommentieren Sie das folgende Beispiel an den angegebenen Stellen: /////////////////////////////////////////////////////////////// class Mitarbeiter { // 1: int personalNr; String name; } //////////////////////////////////////////////////////////////// class Angestellter extends Mitarbeiter { // 2: double gehalt; } // Ausführende Klasse mit main ////////////////////////////// class Test { public static void main(String[] a) { Mitarbeiter m = new Mitarbeiter(); // 3: Angestellter ang = new Angestellter(); // 4: } } 8. Wie kann die Benutzung eines Basis-Attributs verhindert werden? 9. Sind alle public-Attribute und -Methoden in der Kindklasse verwendbar? 10. Wenn eine aufgerufene Methode in der Kindklasse nicht vorhanden ist, wo wird sie dann gesucht? 11. Wie ist die Suchrichtung nach einer passenden Methode und was spielt dabei noch eine Rolle? 12. Was bedeutet es, eine Basisklassen-Methode zu überschreiben? 13. Wie kann eine überschriebene Basisklassen-Methode dennoch aufgerufen werden? Abstrakte Klassen: 1. Was versteht man unter einer abstrakten Klasse? 2. Darf eine abstrakte Klasse einen Konstruktor haben? 3. Darf eine abstrakte Klasse konkrete Methoden haben und wozu braucht sie diese ? 4. Was versteht man unter abstrakten Methoden? 5. Was muss eine abgeleitete Klasse mit den abstrakten Methoden der Basisklasse machen? Polymorphie: 1. Welches sind die zwei Grundaussagen der Polymorphie ? 2. Was ist die Grundlage der Typ-Konvertierung? 3. Wodurch ist der konkrete Typ eines Objektes geprägt, durch den Typ seiner Referenzvariable oder den Typ seines Konstruktors? 4. Wann ist eine implizite Typkonvertierung möglich? 5. Wann ist eine explizite Typkonvertierung nötig? Innere Klassen: 2. Beschreiben Sie die Vorteile einer inneren Klasse in Bezug auf die Zugriffsprivilegien (innere -> äußere, äußere -> innere Klasse). 3. Was muss die äußere Klasse beachten,wenn sie auf ein privates Objekt der inneren Klasse zugreifen möchte? 4. Welchen Fehler meldet der Java-Compiler bei dem folgenden Beispiel und wodurch wird er bewirkt? ///////////////////////////////////////////////////////////////////// class Kunde { private String name; private Adresse adr; // Referenz auf das innere Adressobjekt public Kunde() { Out.println("Kundenname: "); this.name = In.readWord(); this.adr = new Adresse(); // neues Adressobjekt erzeugt } //////////////////// Innere Klasse /////////////////////////// class Adresse { private String strasse; private String ort; private int tel; public Adresse() { Out.println("\n------ Adresse: "); Out.print("Ort: "); this.ort = In.readWord(); Out.print("Strasse: "); this.strasse = In.readWord(); Out.print("Tel: "); this.tel = In.readInt(); } void getAdresse() { Out.println("Ort: " + ort); } } // end Adresse } // end Kunde //////////////////////////////////////////////////// class InnereKlasse1 { public static void main (String args[]){ Kunde eins = new Kunde(); eins.adr.getAdresse(); } } Interfaces: 5. Was alles darf in einem Interface stehen? 6. Welche Kennzeichner / Schlüsselworte sind in einem Interface festgelegt und dürfen daher weggelassen werden? 7. Schreiben Sie eine Klasse Viereck, die folgendes Interface implementiert: interface GeomFunktion { // Schnittstelle final float pi = 3.14159f; // Konstante float flaeche( ); // Methoden float umfang ( ); } ======================================================================== ======================================================================== B. Praktischer Teil: 1. Schreiben Sie ein Java-Programm nach folgenden Vorgaben: Klasse Kunde { Private Attribute: Kundennummer (String) Kundenname (String) Ort (String) Public Methoden: void setKN( string t) String getKN( ) Void setKName( String t) String getKName( ) Void setOrt( String t) String getOrt( ) String getAll( ) Kunde ( String k, String n, String o) } class KundenVerwaltung { main { Kunde [ ] kunden = new Kunde [ 100 ]; // Von Tastatur einlesen ! // abspeichern in DATEI // und wieder einlesen } ////////////////////////////////////////////////////////////////////////////// 2. Schreiben Sie eine abstrakte Java-Klasse STUDENT, die folgende Eigenschaften hat: private Objekt-Attribute: Vorname (String) Nachname (String) Matrikelnr (int) Statisches Attribut: Objektzähler (int) Konstruktor: zwei Parameter (String vorname, String nachname) Vorname, Nachname mit Parameter initialisiert Matrikelnummer mit ++Objektzähler initialisiert Methode: gibAus() Gibt Attribute aus. 2. Leiten Sie die konkrete Klasse FH_STUDENT davon ab. Schreiben Sie einen Konstruktor, der den Vornamen und den Nachnamen an den Basisklassenkonstruktor übergibt. 3. Überschreiben Sie die Methode gibAus() und rufen Sie darin die Basisklassenmethode gibAus() explizit auf. 4. Schreiben Sie eine Test-Klasse mit main, die zwei FH_STUDENT-Objekte erzeugt und diesen beim Konstruktoraufruf bereits frei gewählte Initialisierungswerte mitgibt. Rufen Sie dann die Ausgabe-Methode für jeden FH_STUDENT auf.