面向对象-内部类
1.局部内部类
1.1 格式
1.1.1 定义格式
把类定义在方法中即可
public void test(){
class Inner{ //定义了一个局部内部了
public void print(){
System.out.println("局部内部类");
}
}
}
1.1.2 对象创建格式
直接在 定义局部内部类的方法中按照 之前创建对象的格式进行创建即可,如果在改方法外就不能使用该局部内部类。
public void test(){
class Inner{ //定义了一个局部内部了
public void print(){
System.out.println("局部内部类");
}
}
Inner inner = new Inner();
inner.print();
}
1.2应用场景
如果需要定义一个在方法中临时使用的类时可以使用局部内部类。不过该内部类基本不会使用到。
1.3 注意事项
内部类可以使用外部的局部变量。但是要求这些局部变量必须是事实常量。
2.成员内部类
2.1 格式
2.1.1 定义格式
把类定义在类中即可
public class Outer {
class Inner{//定义了一个成员内部类
//成员方法
public void Print(){
System.out.println("这是一个成员内部类");
}
}
}
2.1.2 对象创建格式
在定义内部类的的类中创建对象即可
public class Outer {
private Inner inner= new Inner();
class Inner{//定义了一个成员内部类
//成员方法
public void Print(){
System.out.println("这是一个成员内部类");
}
}
}
2.2 特点
1.在成员内部类中可以直接使用外部类的成员,即使这个成员是私有的
2.如果外部类的成员和内部类的成员重名了,可以使用外部类名this.成员名来表示外部类的成员
3.成员内部类中不能定义静态的成员(非静态中不用使用静态)
2.3应用场景
一个类不会单独使用,需要和另外类(外部类)一起使用才有意义。并且会用到外部类中的私有成员的时候可以把该类定义为一个外部类。例如ArrayList中的str
3.静态内部类
3.1格式
3.1.1定义格式
把 定义在类中方法外,然后使用static关键字修饰即可
public class Outer {
static class Inner{//定义了一个静态内部类
//成员方法
public static void Print(){
System.out.println("这是一个静态内部类");
}
}
}
3.2 特点
在静态内部类中可以直接使用外部类静态,即使是私有的。
3.2应用场景
一个类不会单独适应,需要和另外类(外部类)一起使用才有意义,需要在内部类中定义成员变量的时候,可以把成员内部类static修饰成静态内部类。例如Interger中的IntergerCache
4 匿名内部类
匿名内部类本质就是一个对象。它是某个类(接口)的子类(实现类)对象
4.1 格式
new 接口名/类名(){
//重写要重写的方法
}
4.2 应用场景
如果需要创建一个类或者接口的子类对象。但是这个子类只会使用一次,没必要创建单独一个类。就可以使用匿名内部类的形势