内部类访问特点:
1、内部类可以直接访问外部类中的成员。
2、外部类要访问内部类,必须建立内部类的对象。
内部类一般用于类的设计。
分析事物时,发现该事物描述中还有事物,而且这个事物还在访问被描述
1、内部类可以直接访问外部类中的成员。
2、外部类要访问内部类,必须建立内部类的对象。
内部类一般用于类的设计。
分析事物时,发现该事物描述中还有事物,而且这个事物还在访问被描述
事物的内容。这是就把还有的事物定义成内部类来描述。
class Outer1 //外部类
{
private int num = 3;
class Inner1 //内部类
{
void show()
{
System.out.println("Inner1 show run " + num);
}
}
public void method()
{
Inner1 in = new Inner1(); //建立内部类对象
in.show();
}
}
class Outer2
{
private static int num = 5;
static class Inner2 //静态内部类
{
void show1()
{
System.out.println("Inner2 show1 run " + num);
}
static void show2()
{
System.out.println("Inner2 show2 run " + num);
}
}
}
public class InnerClassDemo1
{
public static void main(String[] args)
{
Outer1 out1 = new Outer1();
out1.method();
//直接访问外部内中的内部类中的成员
Outer1.Inner1 in1 = new Outer1().new Inner1();
in1.show();
//如果内部类是静态的,相当于一个外部类
Outer2.Inner2 in = new Outer2.Inner2();
in.show1();
//如果内部类是静态的,其成员是静态的
Outer2.Inner2.show2();
}
}
如果内部类中定义了静态成员,那么该内部类也必须是静态的。
为什么内部类能直接访问外部类中的成员?
因为内部类持有了外部类的引用:外部类名.this
内部类在局部位置上只能访问局部中被final修饰的局部变量。
class Outer
{
int num = 3;
void method()
{
final int x = 10; //final修饰的局部变量
class Inner
{
void show()
{
System.out.println("Inner show run..." + x);
}
}
Inner in = new Inner();
in.show();
}
}