内部类
一、定义:
一个类定义在另外一个类的内部,那么该类就称作为内部类。
二、内部类的class文件名:
外部类$内部类.
好处:便于区分该class文件是属于哪个外部类的。
三、两种内部类:
1.成员内部类
成员内部类的访问方式:
方式一:在外部类提供一个方法创建内部类的对象进行访问。
方式2二:在其他类直接创建内部类的对象。 格式:外部类.内部类 变量名 = new 外部类().new 内部类();
注意: 如果是一个静态内部类,那么在其他类创建的格式:
外部类.内部类 变量名 = new 外部类.内部类();
//外部类
class Outer{
int x = 100;
//成员内部类
class Inner{
int i = 10;
public void print(){
System.out.println("这个是成员内部类的print方法!"+i);
}
}
//在外部的方法中创建了内部类的对象,然后调用内部方法。
public void instance(){
Inner inner = new Inner();
inner.print();
}
}
class Main {
public static void main(String[] args)
{
Outer.Inner inner = new Outer().new Inner();
inner.print();//创建内部类对象,访问内部成员
Outer outer = new Outer();
outer.instance();//使用外部类创建内部类对象的方法从而访问内部类的成员
}
}
2.局部内部类
局部内部类: 在一个类的方法内部定义另外一个类,那么另外一个类就称作为局部内部类。
注意:如果局部内部类访问了一个局部变量,那么该局部变量必须使用final修饰。
class Outer{
String name= "外部类的name";
public void test(){
//局部变量
final int y =100;
//局部内部类
class Inner{
int x = 10;
public void print(){
System.out.println("这个是局部内部类的print方法.."+y);
}
}
Inner inner = new Inner();
inner.print();
}
}
class Main {
public static void main(String[] args)
{
Outer outer = new Outer();
outer.test();
}
}
四、内部类的好处:
内部类可以直接访问外部类的所有成员。
五、内部类要注意的细节:
- 如果外部类与内部类存在同名的成员变量时,在内部类中默认情况下是访问内部类的成员变量。可以通过”外部类.this.成员变量名” 指定访问外部类的成员。
- 私有的成员内部类只能在外部类提供一个方法创建内部类的对象进行访问,不能在其他类创建对象了。
- 成员内部类一旦出现了静态的成员,那么该类也必须使用static修饰。
class Outer{
int x = 100;
//静态成员内部类
static class Inner{
static int i = 10;
public void print(){
System.out.println("这个是成员内部类的print方法!"+i);
}
}
}
class Main {
public static void main(String[] args)
{
Outer.Inner inner = new Outer.Inner();//创建静态内部类对象的方法与非静态的不同
inner.print();
}
}