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);
}
}大家事先预测一下打印结果,再编译运行一下,对比结果,想想为什么会是这样的结果?
{
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);
}
}大家事先预测一下打印结果,再编译运行一下,对比结果,想想为什么会是这样的结果?
B b = new B();//A.B
A a = new B();//A不是B的父类吧?
所有变量都是private的,你能new?? 能访问到??
内部类还能从外部实例化??果然这个世界上的天才真多啊....
我们赶快挖个洞把自己埋了吧...没脸见人啊
{
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
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.在类内部可以是使用外层类,但是如果生成一个实例的句柄就没有提供访问上层类的功能。我先只能理解这么多,也不是很完全,希望与各位共同研究.