master
3009594 2024-10-09 19:00:24 +02:00
parent d213d58262
commit 65ab8b6981
2 changed files with 112 additions and 15 deletions

View File

@ -0,0 +1,27 @@
package VorlesungsFolien.Verebung;
public class A {
void f() {
System.out.println("A");
}
public static void main(String[] args) {
A a1 = new A();
A a2 = new B();
B b = new B();
a1.f();
// Ausgabe B:
// Das passiert aufgrund des Konzepts des Polymorphismus
// Dies liegt am Prinzip der dynamischen Bindung
a2.f();
}
}
class B extends A {
void f() {
System.out.println("B");
}
}

View File

@ -6,29 +6,75 @@ public class Firma {
private ArrayList<Mitarbeiter> mas = new ArrayList<>(); private ArrayList<Mitarbeiter> mas = new ArrayList<>();
public static void main(String[] args) { public static void main(String[] args) {
Mitarbeiter mi = new Mitarbeiter("Müller", "27.10.1972"); Mitarbeiter mi = new Manager("Stromberg", "01.02.1970", "Finanzen");
Manager ma = new Manager("Stromberg", "01.02.1970", "Finanzen"); Manager ma = new Geschaeftsfuehrer();
Mitarbeiter m = new Geschaeftsfuehrer();
Firma hal = new Firma();
hal.mitarbeiterEinstellen(mi);
hal.mitarbeiterEinstellen(ma);
Mitarbeiter mi2 = new Mitarbeiter("Mayer", "12.12.1999");
hal.mitarbeiterEinstellen(mi2);
// ma = mi; // geht nicht! // Ja weil Manager ein Mitarbeiter ist
if (mi instanceof Mitarbeiter )
System.out.println("Ja ");
// Ja weil Manager ein Manager ist
if (mi instanceof Manager )
System.out.println("Ja stimmt");
// nein, weil nicht jeder manager ein Geschaeftsfuehrer ist, aber jeder Geschaeftsfuehrer ist ein manager
if (mi instanceof Geschaeftsfuehrer)
System.out.println("Ja");
if (null instanceof Geschaeftsfuehrer )
System.out.println("null");
if (null instanceof Mitarbeiter )
System.out.println("null");
if (null instanceof Manager )
System.out.println("null");
if (ma instanceof Geschaeftsfuehrer)
System.out.println("Ja");
mi = ma; mi = ma;
//ma = mi; nein, weil nicht jeder mitarbeiter ein manager ist!
Mitarbeiter mitarbeiter = new Mitarbeiter("Müller", "27.10.1972");
Manager manager = new Manager("Stromberg", "01.02.1970", "Finanzen");
Firma firma = new Firma();
firma.mitarbeiterEinstellen(mitarbeiter);
firma.mitarbeiterEinstellen(manager);
Mitarbeiter mitarbeiter2 = new Mitarbeiter("Mayer", "12.12.1999");
firma.mitarbeiterEinstellen(mitarbeiter);
/* geht nicht! Warum?
* weil nicht jeder mitarbeiter ein manager ist!
*/
// manager = mitarbeiter; //geht nicht!
//weil jeder manager ist ein mitarbeiter
mitarbeiter = manager;// Ja geht:
System.out.println("Polymorphismus"); System.out.println("Polymorphismus");
System.out.println(mi.getGehalt()); System.out.println(mitarbeiter.getGehalt());
System.out.println(ma.getAbteilung()); System.out.println(manager.getAbteilung());
// System.out.println(mi.getAbteilung()); // geht nicht, wg. statischem Typ Mitarbeiter // System.out.println(mitarbeiter.getAbteilung()); // geht nicht, wg. statischem Typ Mitarbeiter
if (mi instanceof Manager) if (mitarbeiter instanceof Manager)
System.out.println( ((Manager)mi).getAbteilung() ); System.out.println( ((Manager)mitarbeiter).getAbteilung() );
((Manager)mi2).getAbteilung(); // ClassCastException zur laufzeit, weil ich if (mitarbeiter instanceof Manager) verwenden soll
((Manager)mitarbeiter2).getAbteilung();
// WICHTIG:
//instanceof prüft, ob die klasse manager die klasse mitarbeiter erbt
} }
private void mitarbeiterEinstellen(Mitarbeiter m) { private void mitarbeiterEinstellen(Mitarbeiter m) {
@ -65,6 +111,10 @@ class Mitarbeiter extends Object {
this.gehalt = gehalt; this.gehalt = gehalt;
this.geburtsdatum = geburtsdatum; this.geburtsdatum = geburtsdatum;
} }
public Mitarbeiter() {
}
public String getDetails() { public String getDetails() {
return name; return name;
@ -86,7 +136,11 @@ class Manager extends Mitarbeiter {
super(name, 65000, geburtsdatum); // das MUSS zuerst gemacht werden! super(name, 65000, geburtsdatum); // das MUSS zuerst gemacht werden!
this.abteilung = abteilung; this.abteilung = abteilung;
} }
public Manager() {
}
public String getDetails() { public String getDetails() {
return super.getDetails() + " " + abteilung; return super.getDetails() + " " + abteilung;
} }
@ -95,3 +149,19 @@ class Manager extends Mitarbeiter {
return abteilung; return abteilung;
} }
} }
class Geschaeftsfuehrer extends Manager{
public Geschaeftsfuehrer(String name, String geburtsdatum, String abteilung) {
super(name, geburtsdatum, abteilung);
}
public Geschaeftsfuehrer(){
}
public void printGeschaeftsfuehrer() {
System.out.println("Hi");
}
}