Zum Hauptinhalt springen

Tag 4

1 Beispiele​

1.1 BZT7​

package ch.bztf;

/**
* Hello world!
*
*/
public class App
{
public static void main( String[] args )
{
Person pers1 = new Person("Muster");

Lernende lern1 = new Lernende("Moritz", 4711);

Lehrer lehr1 = new Lehrer("Lempel", 12345, "RitschRatschMühle");

Angestellte ange1 = new Angestellte("Verwalti", 54321, true);

Angestellte ange2 = new Angestellte("Schläffrig", 345, false);

System.out.println(pers1.toString());
System.out.println(lern1.toString());
System.out.println(lehr1.toString());
System.out.println(ange1.toString());
System.out.println(ange2.toString());

System.out.println("#-------------------------------------------------------------------------------------------------------------------------------------------------#");

ange1.heiraten(ange2);
lehr1.heiraten(lehr1);
ange2.heiraten(lehr1);

ange1.scheiden();
ange2.scheiden();
lehr1.scheiden();

System.out.println("#-------------------------------------------------------------------------------------------------------------------------------------------------#");

System.out.println(ange1.equals(ange1));
System.out.println(ange1.equals(ange2));
Angestellte ange3 = new Angestellte("Schläffrig");
System.out.println(ange2.equals(ange3));
Angestellte ange4 = new Angestellte("Hampelmann");
System.out.println(ange1.equals(ange4));
}
}
package ch.bztf;

public class Person {
protected String nachname;

protected Person(String nachname) {
this.nachname = nachname;
}

public void setNachname(String nachname) {
this.nachname = nachname;
}

public String getNachname() {
return nachname;
}

// public String vorstellen() {
// String output = "Ich heisse " + getNachname() + "! Von der Klasse " + this.getClass() + ".";
// return output;
// }

@Override
public String toString() {
return nachname + " (Attributquelle: Klasse Person) - " + getClass() + ".";
}

private Person ehepartner = null; // Die Referenz auf den Ehepartner wird erstellt, aber auf null gesetzt
// einAngestellter.heiraten(eineAngestellte); Als Hinweis: Der Aufruf im main!
protected void heiraten(Person ehepartner) //
{
if (this != ehepartner) // überprüfung ob nicht selber
{
if(this.ehepartner == null && ehepartner.ehepartner == null) // wenn beide noch nicht verheiratet sind
{
this.ehepartner = ehepartner; // person auf ehepartner setzen
ehepartner.ehepartner = this; // ?

System.out.println(nachname + " und " + ehepartner.getNachname() + " haben geheiratet. ");
}
else // wenn mind. jemand bereits verheiratet ist
{
System.out.println(nachname + " und " + ehepartner.getNachname() + " können nicht heiraten, " + "weil mindestens einer bereits verheiratet ist! ");
}
}
else // wenn selber
{
System.out.println(nachname + " kann sich nicht selber heiraten!");
}
}

protected void scheiden() {
if (ehepartner != null) {
Person temp = ehepartner;
ehepartner.ehepartner = null;
this.ehepartner = null;

System.out.println(nachname + " und " + temp.getNachname() + " haben sich geschieden.");
} else {
System.out.println(nachname + " ist nicht verheiratet.");
}
}

@Override
public boolean equals(Object obj) {
if (this == obj) {
return true;
} else if (obj == null) {
return false;
} else if (obj.getClass() == getClass() && this.hashCode() == ((Person)obj).hashCode()) {
return true;
} else {
return false;
}
}

@Override
public int hashCode() {
return super.hashCode();
}

}
package ch.bztf;

public class Mitarbeiter extends Person {
protected int personalNummer;

protected Mitarbeiter(String nachname, int personalNummer) {
super(nachname);
this.personalNummer = personalNummer;
}

protected Mitarbeiter(String nachname) {
super(nachname);
}

public void setPersonalNummer(int personalNummer) {
this.personalNummer = personalNummer;
}

public int getPersonalNummer() {
return personalNummer;
}

// @Override
// public String vorstellen() {
// return super.vorstellen() + " Meine Personalnummer ist " + getPersonalNummer() + " und ich";
// }

@Override
public String toString() {
return super.toString() + " - Personalnummer: " + getPersonalNummer() + " (Attributquelle: Klasse Mitarbeiter).";
}

@Override
public int hashCode() {
return super.hashCode();
}
}
package ch.bztf;

public class Lernende extends Person {
private int nummer;

public Lernende(String nachname) {
super(nachname);
}

public Lernende(String nachname, int nummer) {
super(nachname);
this.nummer = nummer;
}

public void setNummer(int nummer) {
this.nummer = nummer;
}

public int getNummer() {
return nummer;
}

// @Override
// public String vorstellen() {
// return super.vorstellen() + " Meine Nummer ist " + getNummer();
// }

@Override
public String toString() {
return super.toString() + " - Nummer: " + getNummer() + " (Attributquelle: Klasse Lernende).";
}

@Override
public int hashCode() {
return super.hashCode();
}
}
package ch.bztf;

public class Lehrer extends Mitarbeiter {
private String fachbereich;

public Lehrer(String nachname, int personalNummer, String fachbereich) {
super(nachname, personalNummer);
this.fachbereich = fachbereich;
}

public void setFachbereich(String fachbereich) {
this.fachbereich = fachbereich;
}

public String getFachbereich() {
return fachbereich;
}

// @Override
// public String vorstellen() {
// return super.vorstellen() + " lehre " + getFachbereich();
// }

@Override
public String toString() {
return super.toString() + " - Fachbereich: " + getFachbereich() + " (Attributquelle: Klasse Lehrer).";
}
}
package ch.bztf;

public class Angestellte extends Mitarbeiter {
private boolean schulleitung;

public Angestellte(String nachname) {
super(nachname);
}

public Angestellte(String nachname, int personalNummer) {
super(nachname, personalNummer);
}

public Angestellte(String nachname, int personalNummer, boolean schulleitung) {
super(nachname, personalNummer);
this.schulleitung = schulleitung;
}

public void setSchulleitung(boolean schulleitung) {
this.schulleitung = schulleitung;
}

public boolean isSchulleitung() {
return schulleitung;
}

// @Override
// public String vorstellen() {
// if(isSchulleitung() == false) {
// return super.vorstellen() + " bin einfacher Angestellter";
// } else {
// return super.vorstellen() + " bin Schulleitungsmitglied";
// }
// }

@Override
public String toString() {
return super.toString() + " - In Schulleitung?: " + isSchulleitung();
}
}

getClass() -> Diese Methode gibt die Klasse zurück

toString() -> Standardmässig gibt diese Methode bei der Ausgabe die Klasse und einen Hashwert aus. Beispiel: bzt7.Angestellte@659e0bfd

hashCode() -> Gibt den Hashwert eines Objekts zurück. Es ist eine eindeutige Identifikation. In jedem Programm gibt es jeden Hashcode nur einmal.

equals() -> Überprüft auf Gleichheit

UML:
UML
Source Code

1.2 BZT8​

package ch.bztf;

/**
* Hello world!
*
*/
public class App
{
public static void main( String[] args )
{
Lernende lern1 = new Lernende("Moritz", 4711);

Lehrer lehr1 = new Lehrer("Lempel", 12345, "RitschRatschMühle");

Angestellte ange1 = new Angestellte("Verwalti", 54321, true);

Angestellte ange2 = new Angestellte("Schläffrig", 345, false);

System.out.println(lern1.toString());
System.out.println(lehr1.toString());
System.out.println(ange1.toString());
System.out.println(ange2.toString());

System.out.println("#-------------------------------------------------------------------------------------------------------------------------------------------------#");

ange1.heiraten(ange2);
lehr1.heiraten(lehr1);
ange2.heiraten(lehr1);

ange1.scheiden();
ange2.scheiden();
lehr1.scheiden();

System.out.println("#-------------------------------------------------------------------------------------------------------------------------------------------------#");

System.out.println(ange1.equals(ange1));
System.out.println(ange1.equals(ange2));
Angestellte ange3 = new Angestellte("Schläffrig");
System.out.println(ange2.equals(ange3));
Angestellte ange4 = new Angestellte("Hampelmann");
System.out.println(ange1.equals(ange4));
}
}
package ch.bztf;

abstract class Person {
protected String nachname;

protected Person(String nachname) {
this.nachname = nachname;
}

public void setNachname(String nachname) {
this.nachname = nachname;
}

public String getNachname() {
return nachname;
}

// public String vorstellen() {
// String output = "Ich heisse " + getNachname() + "! Von der Klasse " + this.getClass() + ".";
// return output;
// }

@Override
public String toString() {
return nachname + " (Attributquelle: Klasse Person) - " + getClass() + ".";
}

private Person ehepartner = null; // Die Referenz auf den Ehepartner wird erstellt, aber auf null gesetzt
// einAngestellter.heiraten(eineAngestellte); Als Hinweis: Der Aufruf im main!
protected void heiraten(Person ehepartner) //
{
if (this != ehepartner) // überprüfung ob nicht selber
{
if(this.ehepartner == null && ehepartner.ehepartner == null) // wenn beide noch nicht verheiratet sind
{
this.ehepartner = ehepartner; // person auf ehepartner setzen
ehepartner.ehepartner = this; // ?

System.out.println(nachname + " und " + ehepartner.getNachname() + " haben geheiratet. ");
}
else // wenn mind. jemand bereits verheiratet ist
{
System.out.println(nachname + " und " + ehepartner.getNachname() + " können nicht heiraten, " + "weil mindestens einer bereits verheiratet ist! ");
}
}
else // wenn selber
{
System.out.println(nachname + " kann sich nicht selber heiraten!");
}
}

protected void scheiden() {
if (ehepartner != null) {
Person temp = ehepartner;
ehepartner.ehepartner = null;
this.ehepartner = null;

System.out.println(nachname + " und " + temp.getNachname() + " haben sich geschieden.");
} else {
System.out.println(nachname + " ist nicht verheiratet.");
}
}

@Override
public boolean equals(Object obj) {
if (this == obj) {
return true;
} else if (obj == null) {
return false;
} else if (obj.getClass() == getClass() && this.hashCode() == ((Person)obj).hashCode()) {
return true;
} else {
return false;
}
}

@Override
public int hashCode() {
return super.hashCode();
}

}
package ch.bztf;

abstract class Mitarbeiter extends Person {
protected int personalNummer;

protected Mitarbeiter(String nachname, int personalNummer) {
super(nachname);
this.personalNummer = personalNummer;
}

protected Mitarbeiter(String nachname) {
super(nachname);
}

public void setPersonalNummer(int personalNummer) {
this.personalNummer = personalNummer;
}

public int getPersonalNummer() {
return personalNummer;
}

// @Override
// public String vorstellen() {
// return super.vorstellen() + " Meine Personalnummer ist " + getPersonalNummer() + " und ich";
// }

@Override
public String toString() {
return super.toString() + " - Personalnummer: " + getPersonalNummer() + " (Attributquelle: Klasse Mitarbeiter).";
}

@Override
public int hashCode() {
return super.hashCode();
}
}
package ch.bztf;

public class Lernende extends Person {
private int nummer;

public Lernende(String nachname) {
super(nachname);
}

public Lernende(String nachname, int nummer) {
super(nachname);
this.nummer = nummer;
}

public void setNummer(int nummer) {
this.nummer = nummer;
}

public int getNummer() {
return nummer;
}

// @Override
// public String vorstellen() {
// return super.vorstellen() + " Meine Nummer ist " + getNummer();
// }

@Override
public String toString() {
return super.toString() + " - Nummer: " + getNummer() + " (Attributquelle: Klasse Lernende).";
}

@Override
public int hashCode() {
return super.hashCode();
}
}
package ch.bztf;

public class Lehrer extends Mitarbeiter {
private String fachbereich;

public Lehrer(String nachname, int personalNummer, String fachbereich) {
super(nachname, personalNummer);
this.fachbereich = fachbereich;
}

public void setFachbereich(String fachbereich) {
this.fachbereich = fachbereich;
}

public String getFachbereich() {
return fachbereich;
}

// @Override
// public String vorstellen() {
// return super.vorstellen() + " lehre " + getFachbereich();
// }

@Override
public String toString() {
return super.toString() + " - Fachbereich: " + getFachbereich() + " (Attributquelle: Klasse Lehrer).";
}
}
package ch.bztf;

public class Angestellte extends Mitarbeiter {
private boolean schulleitung;

public Angestellte(String nachname) {
super(nachname);
}

public Angestellte(String nachname, int personalNummer) {
super(nachname, personalNummer);
}

public Angestellte(String nachname, int personalNummer, boolean schulleitung) {
super(nachname, personalNummer);
this.schulleitung = schulleitung;
}

public void setSchulleitung(boolean schulleitung) {
this.schulleitung = schulleitung;
}

public boolean isSchulleitung() {
return schulleitung;
}

// @Override
// public String vorstellen() {
// if(isSchulleitung() == false) {
// return super.vorstellen() + " bin einfacher Angestellter";
// } else {
// return super.vorstellen() + " bin Schulleitungsmitglied";
// }
// }

@Override
public String toString() {
return super.toString() + " - In Schulleitung?: " + isSchulleitung();
}
}

In BZT8 wurden die abstrakten Klassen eingeführt. abstract kann vor die Klasse geschrieben werden und erlaubt es nicht mehr eine Instanz von dieser Klasse zu erstellen. Somit können nur noch die Subklassen von dieser Klasse erstellt werden.

1.3 BZT9​

package ch.bztf;

/**
* Hello world!
*
*/
public class App
{
public static void main( String[] args )
{
Lernende lern1 = new Lernende("Moritz", 4711);

Lehrer lehr1 = new Lehrer("Lempel", 12345, "RitschRatschMühle");

Angestellte ange1 = new Angestellte("Verwalti", 54321, true);

Angestellte ange2 = new Angestellte("Schläffrig", 345, false);

System.out.println(lern1.toString());
System.out.println(lehr1.toString());
System.out.println(ange1.toString());
System.out.println(ange2.toString());

System.out.println("#-------------------------------------------------------------------------------------------------------------------------------------------------#");

ange1.heiraten(ange2);
lehr1.heiraten(lehr1);
ange2.heiraten(lehr1);

ange1.scheiden();
ange2.scheiden();
lehr1.scheiden();

System.out.println("#-------------------------------------------------------------------------------------------------------------------------------------------------#");

System.out.println(ange1.equals(ange1));
System.out.println(ange1.equals(ange2));
Angestellte ange3 = new Angestellte("Schläffrig");
System.out.println(ange2.equals(ange3));
Angestellte ange4 = new Angestellte("Hampelmann");
System.out.println(ange1.equals(ange4));

System.out.println("#-------------------------------------------------------------------------------------------------------------------------------------------------#");

// Anzahl wird auf 3 gesetzt, mindestkonsum ist allerdings auf 4
System.out.println("Bitte als Angestellter Fr. " + ange1.kantineKonsum(3) + " bezahlen.");

// Anzahl wird auf 5 gesetzt, mindestkonsum ist allerdings auf 8
System.out.println("Bitte als Lehrer Fr. " + lehr1.kantineKonsum(5) + " bezahlen.");

// Lernender hat kein mindestkonsum. Dazu bekommt er noch 10% Rabatt
System.out.println("Bitte als Lernender Fr. " + lern1.kantineKonsum(7) + " bezahlen.");
}
}
package ch.bztf;

abstract class Person {
protected String nachname;
protected final double minpreis = 2.50;

protected Person(String nachname) {
this.nachname = nachname;
}

public void setNachname(String nachname) {
this.nachname = nachname;
}

public String getNachname() {
return nachname;
}

// public String vorstellen() {
// String output = "Ich heisse " + getNachname() + "! Von der Klasse " + this.getClass() + ".";
// return output;
// }

@Override
public String toString() {
return nachname + " (Attributquelle: Klasse Person) - " + getClass() + ".";
}

private Person ehepartner = null; // Die Referenz auf den Ehepartner wird erstellt, aber auf null gesetzt
// einAngestellter.heiraten(eineAngestellte); Als Hinweis: Der Aufruf im main!
protected void heiraten(Person ehepartner) //
{
if (this != ehepartner) // überprüfung ob nicht selber
{
if(this.ehepartner == null && ehepartner.ehepartner == null) // wenn beide noch nicht verheiratet sind
{
this.ehepartner = ehepartner; // person auf ehepartner setzen
ehepartner.ehepartner = this; // ?

System.out.println(nachname + " und " + ehepartner.getNachname() + " haben geheiratet. ");
}
else // wenn mind. jemand bereits verheiratet ist
{
System.out.println(nachname + " und " + ehepartner.getNachname() + " können nicht heiraten, " + "weil mindestens einer bereits verheiratet ist! ");
}
}
else // wenn selber
{
System.out.println(nachname + " kann sich nicht selber heiraten!");
}
}

protected void scheiden() {
if (ehepartner != null) {
Person temp = ehepartner;
ehepartner.ehepartner = null;
this.ehepartner = null;

System.out.println(nachname + " und " + temp.getNachname() + " haben sich geschieden.");
} else {
System.out.println(nachname + " ist nicht verheiratet.");
}
}

@Override
public boolean equals(Object obj) {
if (this == obj) {
return true;
} else if (obj == null) {
return false;
} else if (obj.getClass() == getClass() && this.hashCode() == ((Person)obj).hashCode()) {
return true;
} else {
return false;
}
}

@Override
public int hashCode() {
return super.hashCode();
}

public abstract double kantineKonsum(int anzahl);

}
package ch.bztf;

abstract class Mitarbeiter extends Person {
protected int personalNummer;

protected Mitarbeiter(String nachname, int personalNummer) {
super(nachname);
this.personalNummer = personalNummer;
}

protected Mitarbeiter(String nachname) {
super(nachname);
}

public void setPersonalNummer(int personalNummer) {
this.personalNummer = personalNummer;
}

public int getPersonalNummer() {
return personalNummer;
}

// @Override
// public String vorstellen() {
// return super.vorstellen() + " Meine Personalnummer ist " + getPersonalNummer() + " und ich";
// }

@Override
public String toString() {
return super.toString() + " - Personalnummer: " + getPersonalNummer() + " (Attributquelle: Klasse Mitarbeiter).";
}

@Override
public int hashCode() {
return super.hashCode();
}
}
package ch.bztf;

public class Lernende extends Person {
private int nummer;

public Lernende(String nachname) {
super(nachname);
}

public Lernende(String nachname, int nummer) {
super(nachname);
this.nummer = nummer;
}

public void setNummer(int nummer) {
this.nummer = nummer;
}

public int getNummer() {
return nummer;
}

// @Override
// public String vorstellen() {
// return super.vorstellen() + " Meine Nummer ist " + getNummer();
// }

@Override
public String toString() {
return super.toString() + " - Nummer: " + getNummer() + " (Attributquelle: Klasse Lernende).";
}

@Override
public int hashCode() {
return super.hashCode();
}

@Override
public double kantineKonsum(int anzahl) {
// 10% Rabatt
return anzahl * minpreis * 0.9;
}
}
package ch.bztf;

public class Lehrer extends Mitarbeiter {
private String fachbereich;

public Lehrer(String nachname, int personalNummer, String fachbereich) {
super(nachname, personalNummer);
this.fachbereich = fachbereich;
}

public void setFachbereich(String fachbereich) {
this.fachbereich = fachbereich;
}

public String getFachbereich() {
return fachbereich;
}

// @Override
// public String vorstellen() {
// return super.vorstellen() + " lehre " + getFachbereich();
// }

@Override
public String toString() {
return super.toString() + " - Fachbereich: " + getFachbereich() + " (Attributquelle: Klasse Lehrer).";
}

@Override
public double kantineKonsum(int anzahl) {
if (anzahl < 8) {
anzahl = 8;
}
return anzahl * minpreis;
}
}
package ch.bztf;

public class Angestellte extends Mitarbeiter {
private boolean schulleitung;

public Angestellte(String nachname) {
super(nachname);
}

public Angestellte(String nachname, int personalNummer) {
super(nachname, personalNummer);
}

public Angestellte(String nachname, int personalNummer, boolean schulleitung) {
super(nachname, personalNummer);
this.schulleitung = schulleitung;
}

public void setSchulleitung(boolean schulleitung) {
this.schulleitung = schulleitung;
}

public boolean isSchulleitung() {
return schulleitung;
}

// @Override
// public String vorstellen() {
// if(isSchulleitung() == false) {
// return super.vorstellen() + " bin einfacher Angestellter";
// } else {
// return super.vorstellen() + " bin Schulleitungsmitglied";
// }
// }

@Override
public String toString() {
return super.toString() + " - In Schulleitung?: " + isSchulleitung();
}

@Override
public double kantineKonsum(int anzahl) {
if (anzahl < 4) {
anzahl = 4;
}
return anzahl * minpreis;
}
}

abstract kann auch bei Methoden genutzt werden. Es dient als Gerüst von Methoden. Diese Methoden MÜSSEN in den Subklassen implementiert werden.

2 Formativer Selbsttest​

PDF Formativer Selbsttest Seite 1 PDF Formativer Selbsttest Seite 2 PDF Formativer Selbsttest Seite 3 PDF Formativer Selbsttest Seite 4

3 Unklarheiten​

Wo zeigt das ehepartner.ehepartner hin? (BZT6)
Er zeigt auf den Übergabeparameter, der übergeben wird. Der Übergabeparameter zeigt auf die Variable private Person ehepartner = null