Zdravím, Problém je v tom, že fieldy nelze na rozdíl od metod přetěžovat, ale jen "zastínit" (shadow). Objekt třídy FooChildInner má vlastně dva odlišné fieldy se stejným názvem. Který z nich použije se definuje už při překladu tím, jaký je v daném místě deklarován (pozor, deklarován - tj. co vidí kompilátor) konkrétní typ - a jelikož metoda inner() vrací FooParentInner, tak se tam použije field FooParentInner.s Řešením je použít metodu (tj. getter). Jo a doporučuji si v IDE zapnout aby byla deklarace fieldu se jménem použitým v předkovi označena za chybu (nebo přinejlepším warning). Je to jedna z věcí, které neměly být nikdy v jazyce povoleny... Kamil Podlešák
-----Original Message----- From: konference-boun...@java.cz [mailto:konference-boun...@java.cz]on Behalf Of Ladislav Kulhanek Sent: Wednesday, August 19, 2009 3:17 PM To: Java Subject: Dedicnost Ahoj, narazil jsem na problem pri dedeni. Mam 2 tridy s vnitrnima tridama: // predek public class FooParent { private FooParentInner fpi = new FooParentInner(); protected FooParentInner inner() { return fpi; } public void print() { System.out.println(inner().s); } protected static class FooParentInner { public String s = "FooParentInner"; } } // potomek public class FooChild extends FooParent { private FooChildInner fci = new FooChildInner(); @Override protected FooChildInner inner() { return fci; } protected static class FooChildInner extends FooParentInner { public String s = "FooChildInner"; } } // main metoda public static void main(String[] args) { FooChild f = new FooChild(); f.print(); } Vypise se FooParentInner. Proc? Nechapu, proc se nevypise text z potomka. Diky za rady.