一、内部类的定义
在一个类中定义的另一个完整的类
二、内部类的分类
成员内部类、局部内部类、静态内部类、匿名内部类
三、内部类的使用
1.成员内部类
直接定义在一个类中
使用格式:
1.创建外部类对象
2.通过外部类对象的new方法创建除内部类对象
3.通过内部类对象调用其方法或者属性
//外部类
public class Outer{
//成员内部类,直接定义在一个外部类中
public class Within{
public void printW(){
System.out.println("这是一个内部类")
}
}
}
//测试
public class Test{
public static void main(String[] args){
//1.创建外部类对象
Outer outer=new Outer();
//2.通过外部类对象,创建内部类对象,直接创建内部类对象会报错
Outer.Within within=outer.new Within();
//3.通过创建出来的内部类对象,可以调用内部类中的属性和方法
within.printW;
}
}
2.局部内部类
定义在方法之中
使用格式:
1.在方法中创建一个类(构造方法中也可以)
2.局部内部类只能在该方法中使用,方法结束自动销毁释放内存
3.在方法中可以直接new出对象
//外部类
public class Outer{
//方法
public void demo(){
/*局部内部类,定义在方法中。成员内部类不用访问修饰符,因为和局部属性一样,作用域
只有在方法中,方法结束自动销毁*/
class Within{
private String name;
public void setName(String name){
this.name=name;
}
public String getName(){
return this.name;
}
}
Within within=new Within();//成员内部类实例化,只能在方法中,方法结束自动销毁释放内存
}
}
3.静态内部类
定义在类之中,和成员内部类的区别在于成员内部类需要先创建出外部类对象,静态内部类可以直接通过类名创建出静态内部类对象
//外部类
public class Outer{
//静态内部类
public static class Within{
public void printW(){
System.out.println("这是静态内部类中普通方法");
}
public void printO(){
System.out.println("这是静态内部类中静态方法");
}
}
}
public class Demo1{
public static void main(String[] args){
/*直接通过类名创建出静态内部类,不用像成员内部类一样先创建出外部类对象,然后再通过外部类对象创建出内部类*/
Outer.Within within=new Outer.Within():
within.printW();//调用静态内部类中方法
Outer.Within.printO;//直接通过类名调用静态内部类中的静态方法
}
}