在Java的世界中,万物皆对象;在封装的思想中,万物都归类。
概念:在类的内部再定义一个完整的类
成员内部类
 private String name = "外部zxx";
 private int age = 23;
 
 public class InnerClass{
     private String country = "China";
     private String name = "内部郑鑫鑫";
     //不可定义静态属性,但常量可以 private static final char sex = '男';
     public void show(){
         System.out.println(OuterClass.this.name);
         System.out.println(OuterClass.this.age);
         System.out.println(this.name);
         System.out.println(this.country);
     }
     public static void main(String[] args) {
         OuterClass outerClass = new OuterClass();
         OuterClass.InnerClass innerClass = outerClass.new InnerClass();
         innerClass.show();
         //不需要用对象去调用
         new OuterClass().new InnerClass().show();
     }
静态内部类
 //在静态内部类前写上无括号的外部类名,展示包含关系(推荐)
 OuterClass.InnerClass innerClass = new OuterClass.InnerClass();
 private String name = "外部zxx";
 private int age = 23;
 
 public static class InnerClass{
     private String country = "China";
     private String name = "内部郑鑫鑫";
     private static int leg = 2;
     //不可定义静态属性,但常量可以 private static final char sex = '男';
     public void show(){
         System.out.println(new OuterClass().age);
         System.out.println(new OuterClass().name);
         System.out.println(this.name);
         System.out.println(this.country);
         //静态属性需要类名.属性名
         System.out.println(InnerClass.leg);
     }
 }
局部内部类
 private String name = "郑鑫鑫";
 private int age = 11;
 
 public void show(){
     String address = "南京";
 
     class Inner{
         private String email = "1272@qq.com";
         private char sex = '男';
         private String name = "zxx内部";
         public void show2(){
             System.out.println(Outer.this.name);
             System.out.println(Outer.this.age);
             System.out.println(this.email);
             System.out.println(this.sex);
             System.out.println(this.name);
             //打印局部变量时address加了final,因为其生命周期无法保证
             System.out.println(address);
             //试一下address能不能被修改,不能
             //address = "修改后的地址";
             email = "123@gamil.com";
         }
     }
     //需要new局部内部类对象并调用show2方法打印
     Inner inner = new Inner();
     inner.show2();
 }
 
 public static void main(String[] args) {
     Outer outer = new Outer();
     //main方法调用时Inner.show2()不会打印,因为没有执行Inner的对象
     outer.show();
 }
匿名内部类
 class Teacher implements Person{
 
         @Override
         public void student() {
             System.out.println("老师属于人");
         }
     }
     new Teacher().student();
     new Person(){
         @Override
         public void student() {
             System.out.println("老师属于人");
         }
     }.student();
 }