class Test { public static void main (String[] args) throws IOException { Structure s = new Structure(); Door d = new Door(); Item i = new Key(); s.use(i); d.use(i); }}class Item{}class Key extends Item{}class Structure{ public void use(Item i){ System.out.println ("Structure.use()"); }}class Door extends Structure { @Override public void use(Item i){ if(i instanceof Key) use((Key) i); else System.out.println ("Door.use(Item)"); } public void use(Key k){ System.out.println ("Door.use(Key)"); }}