内部类
-
成员内部类: 成员内部类可以访问外部类的所有成员变量和方法(无论静态、非静态、私有、非私有),自身没有静态成员。
在外部类中如果要访问成员内部类的成员,必须先创建 一个成员内部类的对象,再通过指向这个对象的引用来访问。
-
静态内部类: 如果用 static 将内部类静态化,那么内部类就只能访问外部类的静态成员变量,不能直接访问外部类的实例变量、实例方法,只有通过对象引用才能访问。
-
局部内部类: 内部类移到了外部类的方法中,然后在外部类的方法中再生成一个内部类对象去 调用内部类方法。(像局部变量一样,不能被public, protected, private和static修饰 )
-
匿名内部类: 类的定义与类的创建,放到与一起完成,或者说在定义类的同时就创建一个类 , 以这种方法定义的没有名字的类成为匿名内部类。
匿名内部类只能选择继承一个类或着实现一个接口,不需要 extends 和 implements 关键字。
此处演示了成员内部类和静态内部类
public class Demo001Test { public static void main(String[] args) { // Outter1.Inner1 inner1 = new Outter1().new Inner1(); // 成员内部类的生成 不过由于private修饰,其他类使用不了 (成员内部类) Outter1.Inner2 inner2 = new Outter1.Inner2(); // 静态内部类的生成 (静态内部类) } } class Outter1{ private String name = "aaaa"; public void test1(){ Inner1 in = new Inner1(); in.test(); } // 成员内部类 私有化后,只能由外部类(Outter1)进行操作 private class Inner1 { private void test(){ System.out.println(name); } } // 静态内部类 static class Inner2{ } }
此处演示局部内部类
class Outter2{ public void test(){ int a = 10; // 此处的a默认被final修饰 class Inner{ // 局部内部类 void test(){ System.out.println(a); } } Inner inner = new Inner(); // inner.test(); } }
此处演示匿名内部类
public class Demo003Test { public static void main(String[] args) { // String b = new String(); // 匿名内部类 A a = new A(){ @Override public void test1() { System.out.println("你好"); } @Override public void test2() { System.out.println("你也好"); } }; a.test1(); a.test2(); } } // 定义一个Object 的子类对象 interface A{ void test1(); // 你好 我好 void test2(); // 你也好 我也好 }