package blatt11; class A { T x; public void foo(T x) { System.out.println("A.foo()" + x.getClass()); } /* wird übersetzt zu: */ // public void foo(Object x) {} // name clash } class B extends A { @Override public void foo(String x) { System.out.println("B.foo()"); } /* bleibt so erhalten, allerdings wird dadurch foo(T x) nicht überschrieben, daher automatisch zusätzlich folgende Ergänzung: */ // public void foo(Object x) { // foo((String) x); } } public class Generics { public static void main(String[] args) { B b = new B(); b.foo("Hello Student!"); // geht A a = b; // generischer Typ von A unbekannt, wäre Object //a = new A(); a.foo(42); // geht nicht (außer vorherige Zeile wird ausgeführt) if (true) return; // auskommentieren um weiterzumachen A a1 = new A<>(); A a2 = new A<>(); if (a1 instanceof A && a2 instanceof A) System.out.println("instanceof: yes"); if (a1.getClass() == a2.getClass()) System.out.println("getClass(): yes"); } }