Sasha,
I tried your example. This is how it works:
File: In.java
package abc;
public class In {
In() {
System.out.println("instantiating outer In class");
}
public static void main(
String[] args ){
Out o = new Out();
o.method();
}
}
File: Out.java
package abc;
class Out {
void method(){
abc.In i = new abc.In();//instantiating outer In class
In in = new In(); // instantiating inner In class
}
class In
{
In() {
System.out.println("instantiating inner In class");
}
}
}
Output is:
instantiating outer In class
instantiating inner In class