内部类:
定义:把类定义在其他类的内部,这个类就被称为内部类。
访问特点:
内部类可以直接访问外部类的成员,包括私有成员
如果外部类要访问内部类的成员,必须要通过创建对象来完成
分类:
成员内部类:定义在类中成员位置
局部内部类:定义在局部位置,一般是在成员方法内部。,一般不加修饰符,范围就是定义它的代码块。
静态内部类:被static 修饰的内部类 ,可以在不创建对象的情况下被实例化。
匿名内部类:一种特殊的局部内部类,他是通过匿名类来实现接口。
成员内部类
定义:在类内成员位置的内部类。
访问方式:外部类名.内部类名 对象名 = 外部类对象.内部类对象;
例如:
publicclass wai {
privateintage=22;
publicclass nei {
void show()
{System.out.println(age);}
}
publicvoid test() {
nei ne=new nei();
ne.show();
}
}
publicclass TEST {
publicstaticvoidmain(String[] args) {
wai.nei ne = new wai().new nei();
ne.show();
}
}
当内部类被静态修饰以后:外部类名.内部类名 对象名 = new 外部类名.内部类名();
例如:
public class wai {
private static int age=22;
static class nei {
void show()
{System.out.println(age);}
}
public void test() {
nei ne=new nei();
ne.show();
}
}
public class TEST {
public static void main(String[] args) {
wai.nei ne = new wai. nei();
ne.show();
}
}
内部类常用的修饰符:private static用来保证数据的安全性和方便访问数据。
需要注意的是:静态内部类访问的外部类数据必须用静态修饰。就是如果是静态的就不需要调用外部类的对象来调用。
局部内部类:
访问特性:可以直接访问外部类成员
可以创建内部类对象,通过对象调用内部类方法,来使用局部内部类功能
特点:
局部内部类访问局部变量必须用final修饰,因为局部内部类会随着方法的调用完毕而消失,这时局部对象并没有消失,还要使用之前的变量。用final修饰以后,这个变量就相当于一个存在堆内存的常量,还能被继续使用。
publicclass wai {
privateinta = 22;
publicvoid show() {
finalintb = 33;//JDK1.7之前必須要加,不然會報錯,但是JDK1.8不用加
class nei {
publicvoid method(){
System.out.println(a);
System.out.println(b);
}
}
nei ne = new nei();
ne.method();
}
}
publicclass TEST {
publicstaticvoidmain(String[] args) {
wai wa=new wai();
wa.show();
}
}
匿名内部类
定义:就是局部内部类的简化写法,本质就是一个继承了该类或者实现了该接口的子类匿名对象。
前提:存在一个类或者接口,类可以是具体的也可以是抽象的。
注意:匿名内部类不能定义构造函数,不存在任何的静态成员变量和成员方法
因为匿名内部类是特殊的局部内部类,所有对局部内部类的约束对匿名内部类也是存在的。
格式:
new 类名或者接口名(){
重写方法;
} ;