内部类的访问规则
1,内部类可以直接访问外部类中的成员,包括私有。
之所以可以直接访问外部类中的成员,是因为内部类中持有了外部类的引用,格式 外部类名.this
2,外部类要访问内部类必须要建立内部类对象。
3,当内部类在成员位置上,就可以被成员修饰符所修饰
比如 private :将内部类在外部类中进行封装。
static :内部类就具备了static的特性。内部类被静态修饰后,只能直接访问外部类中的静态成员。
当内部类中定义了静态成员,该内部类必须是static的。
局部内部类。
1,只有定义在成员位置才能被私有或者静态修饰。
内部类不能被成员修饰符修饰。
2,可以直接访问外部类中的成员,因为还持有外部类中的引用。
但是不可以访问它所在的局部中的变量,只能访问被final修饰的局部变量。
1,内部类可以直接访问外部类中的成员,包括私有。
之所以可以直接访问外部类中的成员,是因为内部类中持有了外部类的引用,格式 外部类名.this
2,外部类要访问内部类必须要建立内部类对象。
3,当内部类在成员位置上,就可以被成员修饰符所修饰
比如 private :将内部类在外部类中进行封装。
static :内部类就具备了static的特性。内部类被静态修饰后,只能直接访问外部类中的静态成员。
当内部类中定义了静态成员,该内部类必须是static的。
class Outer
{
private int x=3;
class Inner //内部类
{
void function()
{
System.out.println("inner"+x);
//打印的结果是inner3 内部类可以直接访问外部类成员包括变量
}
}
void method()
{
Inner in=new Inner();
in.function(0);
//外部类要访问内部类必须要建立内部类对象。
}
}
class InnerClassDemo
{
public static void main(String[] args)
Outer out=new Outer();
out.method();
Outer.Inner in=new Outer().new Inner();
// 当内部类定义在外部类的成员位置上,而且非私有
//直接访问内部类的成员格式。一般不常用
}
class Outer
{
private int x=3;
class Inner
{ int x=7;
void function()
{ int x=10;
System.out.println("inner"+Outer.this.x+","+this.x+","+x);
//打印结果是 3,7,10 Outer.this这是访问外部类中的成员的具体格式
}
}
void method()
{
Inner in=new Inner();
in.function(0);
}
}
静态内部类的具体应用
class Outer
{
private int x=3;
static class Inner
{ int x=7;
void function()
{ int x=10;
System.out.println("inner:"+x);
//这样会出错的。内部类被静态修饰后,只能直接访问外部类中的静态成员。
}
}
void method()
{
Inner in=new Inner();
in.function(0);
}
}
class InnerClassDemo
{
public static void main(String[] args)
new Outer.Inner().function();
//直接方位静态内部类的访问写法。
}
局部内部类。
1,只有定义在成员位置才能被私有或者静态修饰。
内部类不能被成员修饰符修饰。
2,可以直接访问外部类中的成员,因为还持有外部类中的引用。
但是不可以访问它所在的局部中的变量,只能访问被final修饰的局部变量。
class Outer
{
int x=3;
void method()
{
int y=7;
class Inner //局部内部类
{
void funciton()//局部内部类的内部方法不能被静态化修饰
{
System.out.println(Outer.this.x);
//局部内部类也可以直接访问外部类成员变量.
System.out.println(y);
//局部内部类访问局部方法变量时候。变量必须要final修饰
//所以这样访问时出错的。要 final int y=7; 修饰。
}
}
new Inner().function();
//必须放在局部类下面。
}
}