Lösung zum Tutoriums-Mini-Test Wird in Java zwischen Gross- und Kleinschreibung unterschieden? Ja, es wird zwischen Gross- und Kleinschreibung unterschieden. D.h. deklariere ich in einem Objekt ein Objektfeld int meinTollerZähler; muss ich, wenn ich diesen benutzen will meinTollerZähler auch genauso schreiben wie vorher, und nicht z.B. MeinTollerZähler. Es existierten die Objektfelder double d und int e. Wie kann ich den Wert von d in e speichern? Da d vom Typ double ist, e vom Typ int und int nicht so genau ist wie double (double umfasst ja auch Kommazahlen, int nicht!) funktioniert folgendes nicht: e = d; Der Compiler würde dies deshalb nicht akzeptieren, weil hier ein Genauigkeitsverlust vorliegt ("possible loss of precision"), da d auch eine Kommazahl sein kann und e nicht! Daher müssen wir dem Compiler explizit sagen, dass wir d vom Typ double zum Typ int umwandeln ("casten") wollen, damit wir es in e speichern können: e = (int) d; Falsche Varianten: e = d; int (double d) = e; (int) d; d = e; int(double d) int e = (double) d + (int) e int e = (int) d; // Denn e existiert ja schon (siehe // Aufgabenstellung) (double) e; int(d); Lösung zum Tutoriums-Mini-Test Wie kann ich explizit auf die Methoden einer Oberklasse zugreifen? Angenommen die Methode heisst in der Oberklasse methX, dann greife ich super.methX(Methodenparameter) darauf zu. Wenn ich kein super verwende, wird, falls in der Unterklasse die Methode methX überschrieben wurde, die Methode der Unterklasse(!) aufgerufen. Da wir aber explizit die Methode der Oberklasse aufrufen wollen, brauchen wir super. (Beispiel bei leseDaten() auf Zettel 5, wir verwenden hier explizit super.leseDaten()) Was ist der Unterschied zwischen einer Klassenmethode und einer ObjektMethode? Objektmethoden gehören zu dem jeweiligen Objekt und arbeiten(benutzen) auf den Objektfeldern, d.h. wenn wir 2 Objekt o1 und o2 der Klasse Konto haben, dann arbeitet die (Objektmethode) einzahlen auf den jeweiligen Kontodaten, d.h. wenn ich o1.einzahlen(...) aufrufe, wird auf dem Konto von o1 gearbeitet. Klassenmethoden arbeiten nicht auf Objektdaten, sondern auf Klassenfeldern. Beispielsweise: Angenommen es existiert das private Klassenfeld zinssatz: . . private static double zinssatz = 0.03; // Der Zinssatz ist drei // Prozent . . und bei dem Objekt würde Alljährlich der Zinssatz um 0,2 Prozent erhöht. Da aber zinssatz geschützt ist, müssen wir dies über eine Methode möglich machen, und dies sollte dann eine Klassenmethode sein, die jährlich mit Konto.erhoeheZinssatz () aufgerufen wird! public static void erhoeheZinssatz() { zinssatz += 0.2; } Merke ebenfalls: Klassenmethoden und -felder existieren auch dann, wenn kein Objekt der Klasse existiert, denn sie sind ja an die Klasse gebunden, und nicht (wie Lösung zum Tutoriums-Mini-Test Objektmethoden und -felder) an die einzelnen Objekte. Welche Dateiendung hat normalerweise der Quellcode eines JavaProgramms? Normalerweise hat eine Java-Quellcode-Datei die Dateiendung .java (dies sind die Dateien wo ihr euer Programm "reinschreibt"). Welche Dateiendung hat normalerweise das ausführbare JavaProgramm? Nach dem der Compiler euren Quellcode kompiliert hat, hat das ausführbare JavaProgramm dann die Dateiendung .class (Dies ist die Datei die von Java dann wirklich ausgeführt wird, dies ist aber in BlueJ nicht so offensichtlich, da dies BlueJ automatisch macht). Haben Konstruktoren denselben Namen wie ihre Klasse? Ja, ein Konstruktor trägt denselben Namen wie die Klasse, ebenfalls darf ein Konstruktor keinen Rückgabetyp haben! Hat jede Klasse mindestens einen Konstruktor? Ja, denn gibt man selbst keinen an, fügt Java der Klasse automatisch den Konstruktor ohne Parameter hinzu, auch wenn dieser dann selbst nichts macht. Hat jede Klasse den Konstruktor der keine Parameter hat? Nein, dieser Konstruktor existiert nur dann, wenn ihr ihn extra angebt, oder wenn ihr gar keinen Konstruktor angebt (dann fügt Java ihn automatisch dazu). Schreibt ihr aber einen oder mehrere Konstruktoren die Parameter haben, und ihr schreibt den parameterlosen nicht selbst, dann existiert dieser auch nicht! Lösung zum Tutoriums-Mini-Test Kann eine Klasse mehrere Konstruktoren mit denselben Parametern haben? (mit Erklärung!) Diese Frage zielte auf folgende Situation ab: Kann folgendes sein Konto(String anrede, String name) { ... } Konto(String name, String vorname) { ... } Also anders formuliert: Dürfen mehrere Konstruktoren mit derselben Signatur existieren? Nein, dies darf nicht sein, denn was würde der Compiler bei folgendem Aufruf tun: Konto x = new Konto("bla","blubb"); Der Compiler wüsste nun nicht welchen der Konstruktoren er nehmen sollte! Vor allem nicht, da der Compiler nicht die Semantik versteht, d.h. er weisst nicht "was" ein name oder vorname ist, und daher kann er nicht aus "bla", "blubb" ersehen, ob dies ein Vorname oder Nachname ist => sowas darf nicht sein, alles muss eindeutig sein! Erbt eine Oberklasse alle Felder und Methoden von der Unterklasse? Eine kleine Fangfrage, denn die Oberklasse erbt ja nichts von der Unterklasse, sondern die Unterklasse von der Oberklasse => Antwort ist nein, denn die Oberklasse erbt gar nix. Diese Frage war dazu da, damit ihr seht, dass es auf sehr genaues Aufgabenlesen ankommt! Lösung zum Tutoriums-Mini-Test Was ist das Ergebnis wenn ich in Java 7/3 rechne? Da 7 und 3 jeweils Integer sind, kommt hier 2 raus, denn das Ergebnis muss dann auch vom Typ Integer sein (7/3 = 3,5 => Integer = 3 denn beim Umwandeln von einer Kommazahl zu einer ganzen Zahl wird einfach der Nachkommateil abgeschnitten) Von welcher Klasse muss ein Applet erben? Von Applet (Merke: Java-Klassen fangen immer mit einem Grossbuchstaben an!) Welche Methoden können bei einem Applet überschrieben werden? Diese Aufgabe war ein bisschen schlecht gestellt, ich wollte hiermit eigentlich nur fragen, welches sind die wichtigen Methoden eines Applets. init, start, stop, destroy und paint. Was wird vererbt? Die nicht privaten Klassenfelder, -methoden, Objektfelder, -methoden. Wie würde ich auf der Konsole die Datei heyjoe.java compilieren? javac heyjoe.java oder javac.exe heyjoe.java ABER nicht: javac.heyjoe.java oder javac.heyjoe oder javac heyjoe Wichtig ist hier das .java! Lösung zum Tutoriums-Mini-Test Wofür sind Konstruktoren da? Man erzeugt keine Objekte mit Konstruktoren! Sondern direkt nachdem ein Objekt erzeugt wurde (mit new) muss ein Konstruktor der Klasse aufgerufen werden. D.h. mithilfe von new wird das Objekt im Speicher erzeugt und dann wird sofort ein Konstruktor aufgerufen. Die Konstruktoren sind dafür da, ein Objekt in einen sinnvollen Anfangszustand zu setzen, d.h. der Konstruktor stellt sicher, dass man mit dem Objekt (sinnvoll) arbeiten kann, nachdem es erzeugt wurde. Bemerkung Dieser Test war lediglich dazu da, dass ihr seht wo eure Probleme liegen. Dieser Test war auch nur von mir für mein(!) Tutorium, und nicht für andere Tutorien, daher wäre ich ganz froh, wenn dieser Test auch innerhalb meines Tutoriums bleibt! Dieser Test soll euch ebenfalls nicht glauben lassen, wenn ihr diesen Test besteht, besteht ihr die Klausur, denn die Tutoren kennen die Klausur auch nicht, daher können wir euch gar nicht genau sagen was drin vor kommt!