class A 
{
int i = 2;
A (){
System.out.println("A");
i --;
}
class B
{
int i = 1;
B(){
System.out.println("B");
i++;
}
}

}
class C
{
public static void main(String [] args){
B b = new B();
A a = new B();
System.out.println(a.i);
System.out.println(b.i);
}
}大家事先预测一下打印结果,再编译运行一下,对比结果,想想为什么会是这样的结果?

解决方案 »

  1.   

    这个也能通过编译?
    B b = new B();//A.B
    A a = new B();//A不是B的父类吧?
      

  2.   

    A a = new B(); 是什么玩意
      

  3.   

    对LZ实在是太敬仰了啊...
    所有变量都是private的,你能new?? 能访问到??
    内部类还能从外部实例化??果然这个世界上的天才真多啊....
    我们赶快挖个洞把自己埋了吧...没脸见人啊
      

  4.   

    class A 
    {
    int i = 2;
    A (){
    System.out.println("A");
    i --;
    }
    class B
    {
    int i = 1;
    B(){
    System.out.println("B");
    i++;
    }
    }

    }
    class C
    {
    public static void main(String [] args)
    {

    A a = new A();
    A.B b = a.new B();
    System.out.println(a.i);
    System.out.println(b.i);
    }
    }
    貌似这么写才对吧!!结果A
    B
    1
    2
      

  5.   

    LZ:首先,你创建内部类的对像的做法是不对的:
    A a = new A();
    B b = a.new B();
    这样才能创建一个内部类的对像.我对内部类有以下四个总结:
    1.内部类的嵌套可以理解成类的链关系,在构造一个内部类(非static)的实例的时候,会将直接外层类的实例作为参数传进构造函数,而外层类的实例也是用其外层类的实例构造,所以是一种链状关系,内部的类可以使用所有外层的类的实例,而外层的类不能使用内层的类, 应用a.this(最外层类实例) ,a.b.c.this(链中某个外层的实例)。
    2.创建一个内部类 new aa().new bb().new()cc 实际上是调用外层类实例.new 本层构造函数()如果内部类是static的不需要外层类的实例多个static嵌套的内部类的实例 aa.bb.cc test = new aa.bb.cc();
    3.继承自内部类要调用父类的外层类的super().
    4.在类内部可以是使用外层类,但是如果生成一个实例的句柄就没有提供访问上层类的功能。我先只能理解这么多,也不是很完全,希望与各位共同研究.
      

  6.   

    见过SBLZ,没见过这么SB的LZ!!