内部类:将一个类定义在另一个类的里面,对里面那个类就称为内部类(内置类,嵌套类)。
访问特点:内部类可以直接访问外部类中的成员,包括私有成员。之所以可以直接访问外部类中的成员,是因为内部类中持有了一个外部类的引用,格式:外部类名.this
外部类要访问内部类中的成员必须建立内部类对象。
访问格式:(1)当内部类定义在外部类的成员位置上,而且非私有,可以在外部其他类中,直接建立内部类对象。
(2)格式:外部类名.内部类名 引用名=new 外部类名().new 内部类名()
(3)当内部类在成员位置上,就可以被成员修饰符所修饰。比如:private 将内部类在外部类中进行封装;static 内部类就具备static的特性。
class Outer
{
private int x=3;
class Inner
{
int x=4;
void method(){
int x=6;
System.out.println(x);//x=6
System.out.println(this.x);//x=4
System.out.println(Outer.this.x);//x=3
}
}
void function(){
Inner in=new Inner();
in.method();
}
}
public class InnerClassDemo
{
public static void main(String[] args)
{
//调用内部类的第一种方式
Outer out=new Outer();
out.function();
//调用外部类的第二种方式
Outer.Inner in=new Outer().new Inner();
in.method();
}
}
谨记:private可以修饰类,前提是该类是内部类。
当内部类被static修饰时,就得进行这样的形式进行访问。
class Outer
{
private static int x=3;
static class Inner
{
void method(){
System.out.println("inner:"+x);
}
}
}
public class InnerClassDemo
{
public static void main(String[] args)
{
new Outer.Inner().method();
}
}
内部类为静态时,第二种方式调用
class Outer
{
private static int x=3;
static class Inner
{
static void method(){
System.out.println("inner:"+x);
}
}
}
public class InnerClassDemo
{
public static void main(String[] args)
{
//new Outer.Inner().method();
Outer.Inner.method();
}
}
注意:当内部类中有变量是static修饰时,该内部类必须为static。