1.内部类的定义
内部类(Inner Class),是 Java 中对类的一种定义方式,在一个类的内部。内部类分为成员内部类、静态内部类、局部内部类和匿名内部类四种,内部类是java类的五大成分之一(属性,方法,构造器,代码块,内部类),可见内部类在java基础体系中相当重要
2.为什么要定义内部类?
采用内部类这种技术,可以隐藏细节和内部结构,封装性更好,让程序的的结构更加合理
3.成员内部类(外部类对象相关)
1.成员内部类就相当于一个外部类的成员变量/成员方法,能被各种修饰符修饰
2.成员内部类能够直接访问外部类的所有属性和方法,包括private
3.创建一个成员内部类的对象需要先创建外部类对象,然后通过外部类对象来创建内部类对象,代码如下:
OuterClass.InnerClass innerclass = new OuterClass().new InnerClass()
4.如果外部类的属性和方法与成员内部类的属性和方法同名,成员内部类调用本类的同名方法时遵循就近原则,要想调用外部类的同名方法,通过外部类类名.this.同名方法名
4.静态内部类(外部类直接相关)
1.静态内部类是由static修饰的内部类,能够被各种访问修饰符修饰
2.静态内部类能够访问外部类的由static修饰的属性和方法,不能访问非static修饰的属性和方法
3.可以直接创建静态内部类的对象,不需要通过外部类
4..如果外部类的属性和方法与静态内部类的属性和方法同名,静态内部类调用本类的同名方法时遵循就近原则,要想调用外部类的同名方法,通过外部类名.同名方法名
5.局部内部类
1.局部内部类定义在方法里或者代码块里面
2.局部内部类不能用任何访问修饰符修饰,就像局部变量一样,最多只能由final修饰,因为这些都是线程私有的,不需要外界访问,外界也不能访问,是存储在栈帧里面的,随着方法调用的结束,内存就会被释放掉
6.匿名内部类
1.匿名内部类和局部内部类一样都是定义在方法中或者代码块里面,只是局部内部类有名字,而匿名内部类没有名字
2.匿名内部类常用于来实现接口,优点是比先直接用一个类来实现该接口然后重写接口中的方法要简洁方便,但缺点是代码耦合度较高,代码如下:
public interface MyInterface {
public void display();
}
MyInterface myInterface = new MyInterface() {
@Override
public void display() {
System.out.println("你好");
}
};
myInterface.display();