1.匿名内部类:匿名类是指没有类名的内部类,必须在创建时使用 new 语句来声明类。匿名类的两种实现:继承一个类,重写其方法;实现一个接口(或多个),实现其方法。匿名类的特点:匿名类可以访问外部类的所有成员;匿名类中允许使用非静态代码块进行成员初始化操作;匿名类的非静态代码块会在父类的构造方法之后被执行。
public class Test8 { void a() { System.out.println("a()"); } public static class A { private void a() { Test8 t = new Test8() { void a() { System.out.println("匿名类a()"); } }; t.a(); } public static void main(String[] args) { A a1 = new A(); a1.a(); } } }
2.再访工厂方法:
interface A2 { void a(); void b(); } interface B2 { A2 getA(); } class C2 implements A2 { @Override public void a() { System.out.println("a()"); } @Override public void b() { System.out.println("b()"); } public static B2 b2 = new B2() { @Override public A2 getA() { return new C2(); } }; } public class Test7 { public static void test(B2 b3) { A2 a2 = b3.getA(); a2.a(); a2.b(); } public static void main(String[] args) { test(C2.b2); } }
3.嵌套类:在另外一个类中定义一个类,这样的类被称为嵌套类。如果不需要内部类对象与外部类对象之间有联系,将内部类声明为static。创建嵌套类的对象,不需要外部类的对象。嵌套类的对象只能访问外部类的静态对象。嵌套类可以不实例化外部类,可以直接使用 外部类名.静态嵌套类名 访问。
public class Test9 { static int i = 10; static class A { static void a() { System.out.println(i); } public static void main(String[] args) { Test9.A.a(); } } }