From 65ab8b698199a656abdac1605cfffe50e432a81f Mon Sep 17 00:00:00 2001 From: 3009594 Date: Wed, 9 Oct 2024 19:00:24 +0200 Subject: [PATCH] verebung --- .../src/VorlesungsFolien/Verebung/A.java | 27 +++++ .../src/VorlesungsFolien/Verebung/Firma.java | 100 +++++++++++++++--- 2 files changed, 112 insertions(+), 15 deletions(-) create mode 100644 Programmierung2/src/VorlesungsFolien/Verebung/A.java diff --git a/Programmierung2/src/VorlesungsFolien/Verebung/A.java b/Programmierung2/src/VorlesungsFolien/Verebung/A.java new file mode 100644 index 0000000..7f0663d --- /dev/null +++ b/Programmierung2/src/VorlesungsFolien/Verebung/A.java @@ -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"); + } +} \ No newline at end of file diff --git a/Programmierung2/src/VorlesungsFolien/Verebung/Firma.java b/Programmierung2/src/VorlesungsFolien/Verebung/Firma.java index 3fbbd2c..6a240d7 100644 --- a/Programmierung2/src/VorlesungsFolien/Verebung/Firma.java +++ b/Programmierung2/src/VorlesungsFolien/Verebung/Firma.java @@ -6,29 +6,75 @@ public class Firma { private ArrayList mas = new ArrayList<>(); public static void main(String[] args) { - Mitarbeiter mi = new Mitarbeiter("Müller", "27.10.1972"); - Manager ma = new Manager("Stromberg", "01.02.1970", "Finanzen"); + Mitarbeiter mi = 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; + + //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(mi.getGehalt()); - System.out.println(ma.getAbteilung()); - // System.out.println(mi.getAbteilung()); // geht nicht, wg. statischem Typ Mitarbeiter + System.out.println(mitarbeiter.getGehalt()); + System.out.println(manager.getAbteilung()); + // System.out.println(mitarbeiter.getAbteilung()); // geht nicht, wg. statischem Typ Mitarbeiter - if (mi instanceof Manager) - System.out.println( ((Manager)mi).getAbteilung() ); + if (mitarbeiter instanceof Manager) + 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) { @@ -65,6 +111,10 @@ class Mitarbeiter extends Object { this.gehalt = gehalt; this.geburtsdatum = geburtsdatum; } + + public Mitarbeiter() { + + } public String getDetails() { return name; @@ -86,7 +136,11 @@ class Manager extends Mitarbeiter { super(name, 65000, geburtsdatum); // das MUSS zuerst gemacht werden! this.abteilung = abteilung; } - + + public Manager() { + + } + public String getDetails() { return super.getDetails() + " " + abteilung; } @@ -95,3 +149,19 @@ class Manager extends Mitarbeiter { 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"); + } + +}