A non static inner class is just like a non static member (member variable or methods) of a class(a class in which they are declared).
1. a lenght property of an object of a Box class only exists when an object of a Box class say b exists. 2. In the same way.....if Box class have declared one non static inner class say BoxOpener and if you want to create object of BoxOpener class say bopener from some where not in class Box then you need an object of Box class. Because without an object of Box class if lenght property does not exists then then the same rule applies to BoxOpener but here the context in which it is declared does not exists.