本文主要介绍了java中的内部类,包括:成员内部类、静态内部类、局部内部类、匿名内部类,介绍了以上内部类的概念、语法、创建对象、注意事项等知识!
1.概念及其分类
内部类:在类中定义的类,称为内部类
外部类:在java文件中,不在类中定义的类称为外部类,
一个java文件只能有一个公共的外部类,该类的类名必须与Java文件名一致
例子:
class Out{
class In{
}
}
Out就是外部类
In就是内部类
类中方法以外
- 成员内部类
- 静态内部类
方法中
- 局部内部类
值或实参
- 匿名内部类
2.成员内部类
如何定义:
定义位置:在类中方法以外
语法:
访问权限修饰符 class 内部类类名{
}
该内部类中有什么:
不用static修饰的都可以,包括但不限于静态属性,静态方法,静态代码块等
如何创建该内部类对象:
语法:内部类类名 对象名 = 外部类对象.new 内部类类名(实参列表);
当内部类属性或方法与外部类重名时
- this.属性名或方法名:表示内部类属性或方法
- 外部类类名.this.属性名或方法名:表示外部类属性或方法
3.静态内部类
如何定义:
定义位置:类中,方法以外
语法:
访问权限修饰符 static class 内部类类名{
}
该内部类中有什么:
类中可以有的,他都可以有
如何创建对象:
内部类类名 对象名 = new 外部类类名.内部类类名(实参列表);
注意:
- 不能直接使用外部类的非静态成员
- 不能使用外部类的this
(以上两点可以理解为,在静态方法中不能使用非静态成员以及this)
4.静态内部类
如何定义:
定义位置:方法中
语法:
class 类名{
}
该内部类有什么:
不能用static修饰成员
如何创建对象:
内部类类名 对象名 = new 内部类类名(实参列表);
注意:
- 没有访问权限修饰符
- 只能在声明的方法中使用,而且必须在定义内部类之后使用
- 内部类方法中的局部变量与所在的方法的局部变量重名,无法区分
5.匿名内部类
定义:
定义位置:实参或属性赋值处
接口名/父类名 对象名 = new 接口名/父类名(){
属性
方法
重写的方法
}
该内部类有什么:
不能用static修饰成员,只有一个系统提供的无参构造函数
如何创建对象:
参考定义
缺点:
- 使代码混乱,导致难以阅读
- 只能创建一个对象
优点:
3. 便于书写