package oop.Polymorphism;

public class Test {

	public static void main(String[] args) {

		Mitarbeiter[] refarray = new  Mitarbeiter[4]; // das geht auch	
		refarray[0] = new Mitarbeiter();
		refarray[1] = new GehaltMitarbeiter();
		refarray[2] = new DailyMitarbeiter();
		refarray[3] = new HourlyMitarbeiter();
		
		for (int i = 0; i <refarray.length; i++)
			
			System.out.println(refarray[i]);
		
		
		// oder 
		for (Mitarbeiter e : refarray)
			System.out.println(e);

		
		
		
		/*
		 * Das folgende Beispiel zeigt, wie Upcasting in Java verwendet wird.
		 * Eine Referenz der Elternklasse (Mitarbeiter) wird verwendet, um auf ein Objekt der Kindklasse (GehaltMitarbeiter) zu zeigen.
		 * Durch Methodenüberschreibung in der Kindklasse wird die spezifische Implementierung der Kindklasse verwendet.
		 */
		Mitarbeiter m1 = new Mitarbeiter("Obai", "Mannheim", "IT", "Obq@gmail", 10000);
		m1 = new GehaltMitarbeiter ("Obai", "Mannheim", "IT", "Obq@gmail", 10000,500);
		/*
		 * Vater kann auf die überschreibene Methode getGehalt() in kindklasse zugreifen
		 * 	da er diese Methode hat.
		 */
		//System.out.println(m1.getGehalt());
		
		
		/*
		 * 
		 * m1 kann nicht auf die methode getBouns() in kindklasse zugreifen,
		 * da er diese Methode nicht hat
		 * 
		 * Lösung: downcasting
		 */
		if (m1 instanceof GehaltMitarbeiter) {
			GehaltMitarbeiter  downcasting = (GehaltMitarbeiter) m1;
			// System.out.println(downcasting.getBouns());
		}
		
	}

}
