https://github.com/Trivo25/tud-java-course
November 25, 2021
Florian Kluge, Moritz Schulz
Florian.Kluge@mailbox.tu-dresden.de
Moritz.Schulz2@mailbox.tu-dresden.de
Festigung der Grundlagen der Objektorientierten Programmierung
Florian Kluge
Florian.Kluge@mailbox.tu-dresden.de
Moritz Schulz
Moritz.Schulz2@mailbox.tu-dresden.de
public Klassenname( /* Parameter */ ) { /* ... */ }new erstellt
Hund laika = new Hund(12, "Laika");luca?luca?seitenlaenge?a?flaeche in main(String[] args)?Wo liegt der Fehler?
Was haben auto1 und auto2 gemeinsam?
public class Programm2 {
public static void main(String[] args) {
Auto auto1 = new Auto(7, 1996, "rot");
Auto auto2 = new Auto(7, 2014, "rot");
}
}
class Auto {
public int sitzplaetze;
public int baujahr;
public String farbe;
public Auto(int autoSitzplaetze, int autoBaujahr, String autoFarbe) {
sitzplaetze = autoSitzplaetze;
baujahr = autoBaujahr;
farbe = autoFarbe;
}
public static void beschreibe() {
System.out.println("Dieses Auto ist " + farbe);
}
}Auto
sitzplaetze und farbebaujahrModelliert einen Würfel als Klasse.
Würfel haben folgende Attribute:
Würfel haben folgende Methoden:
halbiereSeitenlängen() ändert Seitenlänge auf die HälfteSchreibt ein Programm, das ein Objekt vom Typ Würfel erstellt. Es soll ausgeben, welches Volumen und welcher Flächeninhalt vom Würfel-Objekt berechnet wird.
public class Programm {
public static void main(String[] args) {
float a = 7;
Würfel wuerfel1 = new Würfel(a);
wuerfel1.halbiereSeitenlängen();
System.out.println("Volumen: " + wuerfel1.Volumen());
System.out.println("Oberflächeninhalt: " + wuerfel1.Oberflacheninhalt());
}
}
class Würfel {
public float Seitenlänge;
public Würfel(float a){
Seitenlänge = a;
}
public float Volumen() {
return Seitenlänge*Seitenlänge*Seitenlänge;
}
public float Oberflacheninhalt() {
return 6*(Seitenlänge*Seitenlänge);
}
public void halbiereSeitenlängen() {
Seitenlänge = Seitenlänge / 2;
}
}void und float bei den Methoden?return auch weglassen werden?main(String[] args) den float nicht a, sondern b nennen würde?public class Würfel schreiben?public float Seitenlänge (Z. 13)public float Volumen(), public float Oberflacheninhalt(), public void halbiereSeitenlängen() (Z. 18, 21, 24)Würfel wuerfel1 (Z. 4)void heißt, kein Wert wird zurückgegeben. float heißt, kein Wert wird zurückgegebenvoid ist, ist ein return erforderlichfloat a (Z. 14)a in b auf Zeilen 3 und 4 ändere, funktioniert das. Der Scope von main(String[] args) hängt nicht mit dem der Klasse Würfel zusammen.java-Datei kann es nur eine public class gebena = Seitenlänge; schreibe?Würfel auch, einfach so, in die Klasse Programm verschieben?public float Seitenlänge; von der Klasse Würfel in die Klasse Programm verschiebe?public void halbiereSeitenlängen() von der Klasse Würfel in die Klasse Programm verschiebe?Seitenlänge im Würfel auf dem Standardwert 0Würfel und Programm überschneiden sich nicht. Das heißt, dass Seitenlänge innerhalb der Klasse Würfel nicht bekannt wäre.public void halbiereSeitenlängen() eine Fehlermeldung entstehen, weil die Variable Seitenlängen in der Klasse Programm nicht bekannt ist. Zum Anderen würde auf Zeile 5 ein Fehler entstehen, weil die Methode halbiereSeitenlängen() dann nicht für Objekte der Klasse Würfel definitiert wäreWas gibt das Programm aus?
public class Demonstration {
public static void main(String[] args) {
int hoehe = 393;
Hochhaus hh = new Hochhaus(3000);
System.out.println(hoehe);
hoehe = hh.hoehe;
System.out.println(hoehe);
}
}
class Hochhaus {
public int hoehe;
public Hochhaus(int hoehe) {
hoehe = hoehe;
System.out.println("Die Höhe ist: " + hoehe);
}
}Ausgabe:
Die Höhe ist: 3000
393
0
Wieso?
Die hoehe von hh bleibt 0. Denn auf Zeile 14 wird beide Male die Höhe von Zeile 13 gemeint.
Wie können wir das Problem beheben?
Parameter vom Konstruktor umbenennen
this. verwenden.this ist das aktuelle Objekt.public class Demonstration {
public static void main(String[] args) {
int hoehe = 393;
Hochhaus hh = new Hochhaus(3000);
System.out.println(hoehe);
hoehe = hh.hoehe;
System.out.println(hoehe);
}
}
class Hochhaus {
public int hoehe; // <-- diese ist mit this.hoehe gemeint
public Hochhaus(int hoehe) {
this.hoehe = hoehe; // nur hier eine Änderung
System.out.println("Die Höhe ist: " + hoehe);
}
}public, private, protected, static, final, ..public und private Modifierpublic und private bestimmen von wo wir auf die Attribute und Methoden einer Klasse zugreiffen können
public) oder nur privat (auch intern) (private)protected (Standardwert) klären wir späterprivate Modifierprivate gekennzeichnet sind können wir nur innerhalb der Klasse zugreifenclass Auto {
private String farbe;
public void printColor() {
// hier haben wir zugriff auf farbe
System.out.println(farbe);
}
}
// ...
public class Programm {
public static void main(String[] args) {
Auto auto1 = new Auto();
// hier haben wir auf farbe keinen Zugriff!
System.out.println(auto1.farbe); //geht nicht
auto1.farbe = "türkis"; //geht nicht
}
}private im Vergleich zu publicpublic erlaubt uns auf Attribute und Methoden außerhalb der Klasse zuzugreifenprivate Attribute lesen und veränderngetter und setter-Methodengetter sind wie ein ‘Read-Only’-Mechanismusclass Auto {
private String farbe;
// getter-Methode für das Attribut farbe
public String getFarbe() {
return farbe;
}
}
// ...
public class Privat {
public static void main(String[] args) {
Auto auto1 = new Auto();
// hier haben wir _indirekten_ Zugriff auf die Farbe
System.out.println(auto1.getFarbe());
}
}private Attribute lesen und verändernsetter können wir private-Attribute ändern, mit der Hilfe von Funktionenclass Auto {
private String farbe;
// setter-Methode um die Farbe zu ändern
public String setFarbe(String neueFarbe) {
farbe = neueFarbe;
}
}
// ...
public class Privat {
public static void main(String[] args) {
Auto auto1 = new Auto();
// hier haben wir _indirekten_ Zugriff auf die Farbe
auto1.setFarbe("blau");
}
}getter und setter?getter haben wir einen ‘Read-Only’ Mechanismus
setter können wir kontrolliert Attribute ändern und setzen
setterfinalfinal deklariert und direkt belegtfinal Attribute können also nachträglich nicht verändert werden!public static void main(String[] args){}private, public, protected)
static und finalBankkonto welches folgende Attribute hat
Bankkonto um folgende Methoden (Parameter ausgelassen):
Pokemon mit folgenden Attributen:
Pokemon soll folgende Methoden haben (Parameter ausgelassen):
See course materials here: https://trivo25.github.io/tud-java-course/
Check out the Cheat Sheet: http://tiny.cc/java-cs