内部类:
类的内部再嵌套一个类,这个类被称为内部类。
访问外部类的所有成员。
常见于源码里会有嵌套的内部类。
内部类按照声明位置的不同分类:
1.成员内部类:
方法外,类的里面,类似于成员变量声明的位置。
class Outer{ //定义成员方法 public void method(){} //定义成员内部类 class Inner{ //定义成员内部类里的成员方法 public void show(){} } } //访问成员内部类的方法或属性: //外部类.内部类 变量 = new 外部类.new 内部类(); Outer.Inner oi = new Outer.new Inner(); oi.show();
2.静态内部类:
方法外,类的里面,有static修饰。
class Outer{ //定义静态内部类 static class Inner{ //定义静态内部类里的成员方法 public void show(); } } //访问静态内部类的方法或属性: //外部类.内部类 变量名 = new 外部类.内部类; Outer.Inner oi = new Outer.Inner(); oi.show();
3.局部内部类:
在方法内声明的类。
class Outer{ //定义方法 public void method(){ //定义局部内部类 class Inner { //定义局部内部类中的方法 public void show(){} } //只能在方法内部访问 new Inner().show(); } } //如何访问局部内部类的方法或属性: //只能在方法内部访问
4.匿名内部类: -- 使用最多
格式: new 父类/接口(){重写父类或接口的方法}。
好处:省去了我们去写实现类或子类。
应用场景:
有无抽象方法或多个抽象方法:
对非抽象的父类简写。
对抽象的父类简写。
对接口简写。
一个抽象类或接口中,并且抽象方法不多(一般不超过三个)。
意思:创建了一个匿名的子类或实现类对象。