interface Schnitt { void g(Schnitt s); void h(Object o); } class Ober implements Schnitt { public void g(Schnitt s) { System.out.print("X "); } public void h(Object o) { System.out.print("Y "); } public void h(Ober o) { System.out.print("Z "); } } class Unter extends Ober { public void g(Unter u) { System.out.print("A "); } public void h(Object o) { System.out.print("B "); } public void h(Schnitt f) { System.out.print("C "); } public void h(Ober o) { System.out.print("D "); } } public class Prog { public static void main(String[] args) { Unter u = new Unter(); Ober o = new Ober(); Schnitt s1 = u; Schnitt s2 = o; s1.g(s2); s1.h(u); // HERE s2.g(o); s2.h(u); u.h(u); // AND HERE u.h(o); o.g(u); o.h(s1); u.g(s1); s1.g(s1); } }