8.内部类
内部类可以直接访问外部类的成员,包括私有成员,但外部类如果要访问内部类,则需要创建内部类的对象,
1.成员内部类
成员内部类常见修饰符
1.private 成员内部类一般不想让外界直接访问,使用private 修饰符、
2.static 静态内部类方便外界直接调用,当用static修饰后,内部类里的方法可以是静态或非静态的,但方法内访问外部类成员时,外部类成员必须是静态成员
外界访问成员内部类的方式
1非静态 外部类.内部类 变量名 =new 外部类().new 内部类();
2静态static 外部类.内部类 变量名 =new 外部类.内部类();
2.局部内部类
1.可以直接访问外部类成员
2.在局部位置可以创建内部类对象,通过对象调用内部类方法
class Outer { private int num = 10; public void method() { //int num2 = 20; //final int num2 = 20; class Inner { public void show() { System.out.println(num); //从内部类中访问本地变量num2; 需要被声明为最终类型 System.out.println(num2);//20 } } //System.out.println(num2); Inner i = new Inner(); i.show(); } } class InnerClassDemo5 { public static void main(String[] args) { Outer o = new Outer(); o.method(); } }
局部内部类访问局部变量的时候,局部变量必须使用final修饰
3.匿名内部类
当抽象类或接口作为形式参数时,如果该方法只调用一次,我们可以用匿名内部类简化写法
new 类名或接口名(){
重写方法
}
这种写法相等于一个重写了抽象类或接口作为父类的方法的子类