// Polymorphie: Mehrgestaltigkeit // abgeleitete Klassen können die Methoden ihrer // Basisklassen "überladen" (durch eigene ersetzen). // Diese neuen Methoden gelten unabhängig vom Typ // der Variable, der sie zugewiesen werden. public class Polymorphie { // Interne Klassen static class PTier { public String farbe; String kennung() { return "Keine Ahnung was ich mal werde."; } } static class PPinguin extends PTier { String kennung() { return "Ich bin ein Pinguin."; } } static class PFisch extends PTier { String kennung() { return "Ich bin ein Fisch."; } } public static void main(String[] args) { PPinguin pingu = new PPinguin(); System.out.println( pingu.kennung() ); PFisch fisch = new PFisch(); System.out.println( fisch.kennung() ); PTier tier = new PTier(); System.out.println( tier.kennung() ); tier = new PPinguin(); // Warum meldet sich das tier hier als Pinguin? System.out.println( tier.kennung() ); // Tests... Object o = new PFisch(); // Warum meldet sich das Tier hier als Fisch? System.out.println(((PTier)o).kennung()); main("Test"); main(100); System.out.println(main(5.5)); } // Auch Polymorphie: Wir überladen eine bereits // existierende Version einer Funktion mit einer // anderen, aber mit unterschiedlichen Parametern! // ERLAUBT: Gleicher Funktionsname, unterschiedliche // Übergabeparameter (unabhängig vom Rückgabewert) public static void main(String args) { System.out.println("Ich bin ein anderes main()"); } public static void main(int i) { System.out.println("i = " + i); } public static int main(double d) { return (int)d; } // Verboten: Gleicher Funktionsname // mit gleichen Parametern, aber // unterschiedlichem Rückgabewert! /********* VERBOTEN ********* public static byte main(double d) { return (byte)d; } *****************************/ }