内部类和匿名内部类
在类内部也可以定义另一个类。如果在类Outer的内部在定义一个类Inner,鄙视类Inner就成为内部类,而类Outer则成为外部类。
java内部类分为四种:
成员内部类,局部内部类,静态内部类和匿名内部类
1)成员内部类:作为外部类的一个成员方存在,与外部类的属性、方法并列。注意:成员内部类中不能定义静态变量,但是可以访问外部类的所有成员。
2)局部内部类:即在方法中定义的内部类,与局部变量类似,在局部内部类前不加修饰符public 或 private,其范围为定义他的代码块。注意:局部内部类中不可以定义静态变量,可以访问外部类的局部变量(及方法内的变量),但是变量必须是final的。
3)静态内部类: 静态内部类定义在类中,任何方法外,用static定义。注意:静态内部类中可以定义静态或者非静态的成员
4)匿名内部类:匿名内部类是一种特殊的局部内部类,它是通过匿名类实现接口。
就是内部类的简化写法。
前提是存在一个类或者接口
格式 new 类名或者接口名(){重写方法}
本质:是一个继承了类或者实现了接口的子类匿名对象
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 public class Outer { 2 public int id=20170901; 3 public String name="honor"; 4 5 class Inner { 6 public String name="华为"; 7 public String address="枫杨路18号"; 8 public void showInner(){ 9 Outer pho=new Outer(); 10 System.out.println("内部类方法输出:"+name+" "+address+" "+pho.id+" "+pho.name); 11 } 12 } 13 14 public void showOuter(){ 15 System.out.println("外部类方法输出:"+id+" "+name); 16 } 17 public static void main(String[] args){ 18 //外部类实例化对象 19 Outer ph=new Outer(); 20 21 Outer.Inner man=ph.new Inner(); //外部类中实例化内部类对象 22 man.showInner(); 23 ph.showOuter(); 24 25 System.out.println("主方法中输出:"+" "+ph.id+" "+ph.name+" "+man.name+" "+man.address); 26 } 27 }