内部类,是指在一个类中,建立的类
内部类分为:成员内部类,局部内部类,匿名内部类(也可看作局部内部类的一种)
成员内部类
成员内部类,就是在类的成员位置上定义的类
1.成员内部类的定义
修饰符 class 外部类名称{
修饰符 class 内部类名称{
//成员内部类类体;
}
//外部类类体;
}
(注:可以static修饰,此时为静态成员内部类,这里不讲)
2.互相访问
成员内部类可以直接访问外部类的资源
外部类使用访问成员内部类的方法,需要通过 new 内部类对象
//在此外部类中
内部类 类名 = new 内部类(参数列表);
//在其他外部类中
外部类.内部类 类名 = new 外部类.new 内部类();
3.同名属性冲突的解决
变量名; //内部类局部变量
this.变量名; //内部类成员变量
外部类.变量名; //外部类成员变量
局部内部类
局部内部类是在方法内部的位置
1.局部内部类定义
修饰符 class 外部类名称{
修饰符 返回值类型 外部类方法(参数列表){
修饰符 class 局部内部类名称{
// 局部内部类
}
}
}
2.访问
局部内部类可以直接外部类
外部类的本方法体内,可以通过 new 内部类对象
3.变量的 final 问题
对于局部内部类,只能访问到 有效 final (jdk8)的局部变量。对于更早版本的jdk,只能访问到 final 定义的局部变量。
匿名内部类
匿名内部类属于局部内部类的一种
匿名内部类并不是指匿名对象,而是指省略 extends, implements 的类
(匿名内部类,是指没有类的名字,得到的产物是对象,对象可以有名字)
语法:
//接口类
接口类名称 变量名 = new 接口类名称(参数列表){
//覆盖未实现方法;
}
//子类
父类名称 变量名 = new 父类名称(参数列表){
//类体;
}
类体访问修饰符
1.外部类: public / (default)
2.成员内部类:public / protected / (default) / private
3.局部内部类(包括匿名内部类):什么都不能写