定义:
定义在一个类内部的类,其中的方法可以访问外部类的域
使用原因:
1、内部类可以访问该类定义的所在作用域的数据,包括私有数据2、内部类可以对同一个包中的其他类隐藏3、当想要定义一个回调函数且不想写大量的代码时,使用匿名内部类比较便捷
分类:
成员内部类
定义:在外部类的内部,而且与成员方法和属性平级的类
(1)成员内部类不能存在static关键字,即不能声明静态属性、静态方法、静态代码块
(2)成员内部类的实例化 外部类.内部类 变量名=外部类的实例.new 内部类()
(3)内部类使用外部类的方法和属性 外部类.this.方法/属性
(4)外部类无法访问内部类的方法和属性,需要实例化一个内部类对象才能访问
(5)单独的class文件,外部类$内部类.class
静态内部类
定义:使用static修饰的内部类叫作静态内部类,在内部类不需要使用外部类的时候可以使用静态内部类
(1)静态内部类可以定义静态成员(静态变量、静态方法)和实例成员
(2)静态内部类只能访问外部类的静态成员 外部类.静态成员
(3)外部类的作用域外使用内部类 外部类.内部类 变量名=new 外部类.内部类()
(4) 单独的class文件,外部类$内部类.class
局部内部类
定义:在代码块、方法内、作用域(使用花括号“{}”括起来的一段代码)内的类叫局部内部类。
(1)局部内部类只能在代码代码块、方法体内和作用域中使用(如创建对象和使用类对象等)
(2)局部内部类访问作用域内的局部变量,该局部变量需要使用final修饰。
(3)可以使用abstract修饰,声明为抽象类。
匿名内部类
定义:局部内部类升级,只创建一个局部内部类的实例,且不用命名就是匿名内部类
匿名内部类定义和实例化形式如下:
new 父类/接口构造方法(参数){
//注:该方法名必须在父类/接口中已经存在
修饰符 返回参数类型 方法名(参数列表){
。。。
}
}
注意这是一个实例
(1)单独的class文件,使用类$数字.class
具体代码参见内部类
https://github.com/iamrenpeng/advancedjava
网友评论