内部类定义:
将一个类定义在另一个类里面,对里面那个类就称为内部类(内置类,嵌套类)
访问特点:
1.内部类可以直接访问外部类的成员,包括私有成员;(这是内部类的最大优点)
2.外部类要访问内部类的成员,必须要先建立内部类的对象。
一般用于类的设计:
分析事物时,发现该事物描述中还有事物,而且这个事物还在访问被描述事物的内容。
这时就是还有的事物定义成内部类来描述。
内部类的修饰符:
1.如果内部类是静态的,相当于一个外部类;
2.如果内部类中定义了静态成员,该静态类也必须是静态的。
为什么内部类能直接访问外部类中成员呢?
那是因为内部类持有了外部类的引用:外部类名.this。
内部类在局部位置上只能访问局部中被final修饰的局部变量,如下例:
1 class Outer 2 { 3 int num = 3; 4 void method() 5 { 6 final int x = 9; 7 class Inner 8 { 9 void show() 10 { 11 System.out.println("show ..."+x); 12 } 13 } 14 Inner in = new Inner(); 15 in.show(); 16 } 17 } 18 19 class InnerClassDemo3 20 { 21 public static void main(String[] args) 22 { 23 new Outer().method(); 24 } 25 }
匿名内部类:
就是内部类的简写格式。(其实就是一个子类对象)
前提:内部类必须继承或者实现一个外部类或者接口。
格式:new 父类or接口() {子类内容}
使用场景:当函数参数是接口类型时,而且接口中的类型不超过三个,可以用匿名内部类作为实际参数进行传递。
举例:
1 class Outer 2 { 3 int num = 4; 4 /* 5 class Inner extends Demo //方式一 6 { 7 void show() 8 { 9 System.out.println("show ..."+num); 10 } 11 } 12 public void method() 13 { 14 new Inner().show(); 15 } 16 */ 17 public void method()//方式二 18 { 19 //new Inner().show(); 20 new Demo() 21 { 22 void show() 23 { 24 System.out.println("show ..."+num); 25 } 26 }.show(); 27 } 28 } 29 30 class InnerClassDemo4 31 { 32 public static void main(String[] args) 33 { 34 new Outer().method(); 35 } 36 }