Ü 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.