内部类
- 内部类就是在一个类的内部再定义一个类,比如,A类中定义一个B类,那么B类相对于A类来说就称为内部类。而A类相对B类来说就是外部类了。
- 一个java类中可以有多个class类,但是只能有一个public class
成员内部类
public class Outer {
private int id = 10;
public void out(){
System.out.println("这是外部类的方法");
}
public class Inner{
public void in(){
System.out.println("这是内部类的方法");
}
//获得外部类的私有属性(是正常类做不到的,但是内部类可以)
public void getID(){
System.out.println(id);
}
}
}
/*
public static void main(String[] args) {
//new
Outer outer = new Outer();
//通过外部类来实例化内部类
Outer.Inner inner = outer.new Inner();
inner.in();
inner.getID();//得到外部类的私有属性(也可以私有方法)这是正常类做不到的
}
*/
- 当外部类、内部类存在重名属性时,会优先访问内部类属性,若想访问外部类属性,则用:外部类.this.属性
- 成员内部类不能定义静态成员
静态内部类
- 加上static关键字
- 不依赖外部类对象,可直接创建或通过类名访问,可声明静态成员
- 普通类不可以用static修饰,只有内部类可以
//外部类
public class Outer {
private String name = "xxx";
private int age = 18;
//静态内部类,和外部类级别相同
static class Inner{
private String address = "四川";
private String phone = "111";
public void show(){
//调用外部类的属性--->创外部类对象
Outer outer = new Outer();
System.out.println(outer.name);
}
}
}
/*
public static void main(String[] args) {
//直接创建静态内部类对象
Outer.Inner inner = new Outer.Inner();//不需要先new外部类对象
//调用方法
inner.show();
}
*/
局部内部类
- 定义在外部类的方法中,作用范围和创建对象范围仅限于当前方法
- 局部内部类访问外部类当前方法中的局部变量时,因无法保障变量的生命周期与自身相同,变量必须修饰为final(jdk1.8后默认含有)
public class Outer {
//局部内部类
public void method(){
int age = 18; (默认为final int age = 18;)
//不能加任何访问修饰符
class Inner{
}
}
匿名内部类:不用将实例保存到变量中,可以直接new 类名().方法();
public class Test {
public static void main(String[] args) {
//匿名
new Apple().eat();
}
}
class Apple{
public void eat(){
System.out.println("吃");
}
}