{ int x; { int x; } } class B extends A { int f(int i, double d) { ... } int f(double d, int i) { ... } String toString() { int k = f(1, 2.0) + f(2.0, 1); int m = f((double)1, 1); int m = f(1, 1); String s = ..; return super.toString() + s; } } class A { void f() {...} } class B extends A { void f() {...} } class C extends B { } A a = new A(); (D)a; class D // extends E class D extends Object { void xyz() { A a = new A(); B b = new B(); C c = new C(); a.f(); b.f(); c.f(); super... a = new B(); a.f(); // ====> B.f ((A)a).f(); // =====> A.f a = new C(); a.f(); // ====> B.f } } class Jatekos {} class TJ extends Jatekos {} class VJ extends Jatekos {} List lista = new ArrayList(); lista.add(new Jatekos()); lista.add(new TJ()); lista.add(new VJ()); for (Jatekos j : lista) { ... } class E; class F extends E; class A { E f(F) { ... } } class B extends A { public E f(F) { ... } }