1.内部类可以直接访问外部类中的成员
2.外部类要访问内部类,必须建立内部类的对象
3.一般用于类的设计
4.分析事物时,发现该事物中还有事物,而且这个事物还在访问被描述事物的内容,这是内部还有的事物定义成内部类来描述
5.如果内部类是静态的,相当于外部类
6.如果内部类里面定义了静态成员,则内部类必须必须用static修饰
eg
class Outer
{
private int sos = 3;
static class Inner
{
void show()
{
System.out.println("inner show ");
}
}
}
class TestInner
{
public static void main(String [] args)
{
//如果Inner不是静态的使用下列方式来创建实例
//Outer.Inner in =new Outer().new Inner();
//in.show();
//如果Inner是静态类,相当于一个外部类,外部类一加载,内部类就存在了
Outer.Inner in = new Outer.Inner();
}
}内部类细节问题
eg:
class Outer
{
int num =3;
class Inner
{
int num =4;
void show()
{
int num =5;
System.out.println(Outer.this.num);
System.out.println(Inner.this.num);
System.out.println(num);
}
}
void method()
{
new Inner().show();
}
}
class TestInner
{
public static void main(String [] args)
{
new Outer().method();
}
}打印结果:
3
4
5
/**************************************/
为什么内部类可以直接访问外部类中的成员呢?
因为:内部类持有了外部类的引用====>外部类.this
------------------------------------------------------------------------------------------------------------------------------------------------------------------
内部类存放在局部位置上(函数中)
class Outer
{
int num =3;
void method()
{
class Inner
{
int num = 8;
void show()
{
System.out.println("show 。。。。"+ num);
System.out.println("show 。。。。"+ Inner.this.num);
System.out.println("show 。。。。"+ Outer.this.num);
}
}
Inner in = new Inner();
in.show();
}
}
class TestInner
{
public static void main(String [] args)
{
new Outer().method();
}
}运行结果:
show 。。。。8
show 。。。。8
show 。。。。3
=========================================================
在Outer类的方法中定义了内部类,如果想在内部类中想调用此方法中的变量,此变量必须是final类型的
eg
class Outer
{
int num =3;
void method()
{
final int num= 9;//此处必须要final修饰,否则报错
class Inner
{
void show()
{
System.out.println("show 。。。。"+ num);
}
}
Inner in = new Inner();
in.show();
}
}
class TestInner
{
public static void main(String [] args)
{
new Outer().method();
}
}
1157

被折叠的 条评论
为什么被折叠?



