public class Vererbung { public static void main(String[] args) { A a = new A(); // Objekt von Klasse A erzeugen B b = new B(); // Objekt von Klasse B erzeugen a.eins = 1; // Geht, "eins" ist Element von Klasse A b.zwei = 2; // Geht auch, "zwei" ist Element von Klasse B b.eins = 1; // "eins" kommt aus der Basisklasse A, die // durch B erweitert wird! // a.zwei = 2; // "zwei" kommt nur in B vor, nicht in A -> geht nicht. b.print_eins(); // Methode "print_eins aus Basisklasse A aufrufen // b = a; // Verboten: Die Variable der erweiterten Klasse darf kein Objekt der // Basisklasse aufnehmen! a = b; // Erlaubt: Die Variable der Basisklasse darf ein Objekt der // erweiterten Klasse aufnehmen! Object o; // Object ist die Basisklasse für ALLE Klassen, unterste Hierarchieebene! o = a; // Erlaubt o = b; // Erlaubt // o.print_eins(); // print_eins ist in Klasse a und b, aber "Object" weiß // nichts davon ((B)o).print_eins(); // CAST (B): Jetzt weiß o, dass es ein B-Objekt ist System.out.println(new A()); // Funktionen aus Object: System.out.println(o.toString()); System.out.println(o.hashCode()); // Bei clone() muss in abgeleiteten Klassen definiert werden, // wie das "Kopieren" stattfinden soll. Es ist also nicht // ein automatisches Verfahren bit-für-bit! // System.out.println(o.clone()); System.out.println("o ist eine Instanz von A: " + (o instanceof A)); System.out.println("o ist eine Instanz von B: " + (o instanceof B)); System.out.println("o ist eine Instanz von Object: " + (o instanceof Object)); System.out.println("o ist eine Instanz von String: " + (o instanceof String)); } } class B extends A { int zwei; } class A { int eins; void print_eins(){ System.out.println(eins); } }