匿名内部类 匿名内部类: 其实是内部类的简化写法(局部内部类) 前提: 需要有一个类或者接口,这个类可以是抽象类,也可以是非抽象类 格式: new 类或者接口名(){ 方法重写 ; }; 匿名内部类的本质: 是一个继承自某一个类或者实现了某一个接口的子类对象 interface Inter {//1 public abstract void show() ; public abstract void method() ; } /* class Animal { } */ // 测试类 class NoNameInnerClassDemo { public static void main(String[] args){ // 匿名内部类 /* new Inter(){ public void show(){ System.out.println("我是匿名内部类,你Y懂不?"); } }; */ System.out.println("----------------------"); // new Animal(){}; // 匿名内部类 /* new Inter(){ public void show(){ System.out.println("我是匿名内部类,你Y懂不?"); } public void method(){ System.out.println("Inner....method....."); } }.show(); new Inter(){ public void show(){ System.out.println("我是匿名内部类,你Y懂不?"); } public void method(){ System.out.println("Inner....method....."); } }.method(); */ //找个类型接收他 Inter in = new Inter(){ public void show(){ System.out.println("我是匿名内部类,你Y懂不?"); } public void method(){ System.out.println("Inner....method....."); } }; // 调用方法 in.show(); in.method(); } } 面试题 1.要求在控制台输出”HelloWorld”? // 接口 interface Inter { void show(); //切记他的权限问题public的 } // 具体的类 class Outer { //补齐代码 public static Inter method(){ return new Inter(){ public void show(){ System.out.println("HelloWorld"); } }; } } // 测试类 class OuterDemo { public static void main(String[] args) { // Outer.method()说明在Outer类中存在一个静态的method方法,参数为空 // Outer.method()可以继续调用show方法,所以返回值本质上应该是一个对象 // 返回值类型应该是: Inter Outer.method().show(); } } 匿名内部类的本质: 是一个继承自某一个类或者实现了某一个接口的子类对象 ---------------------------------------------------------------------------------------------------------------------- 2.如何调用PersonDemo中的method方法呢? //这里写抽象类,接口都行 abstract class Person { public abstract void show(); } // 子类继承 /* class Student extends Person { public void show(){ System.out.println("Student....show...."); } } */ class PersonDemo { public void method(Person p) { p.show(); } } // 测试类 class PersonTest { public static void main(String[] args) { //如何调用PersonDemo中的method方法呢? // 创建PersonDemo对象 PersonDemo pd = new PersonDemo(); // 创建Student对象 // Student s = new Student(); // 调用方法 pd.method(new Person(){ public void show(){ System.out.println("Student....show...."); } }); } } |