- 其实匿名内部类也就是局部内部类的简化形式
- 前提:存在一个类或接口
- 格式:
new 抽象类名或者接口名(){
重写该方法;
} - 本质:因为我们知道,抽象类和接口是不能被直接实例化的,这里虽然写成了 new 抽象类名或者接口名,其实它的本质上还是抽象类的子类或者接口的实现类的一个对象,因为它重写了抽象的方法
- 匿名内部类在开发中的使用
我们在开发的时候,会看到抽象类,或者接口作为参数。
而在这个时候,我们知道实际需要的是一个子类对象
如果该方法仅仅只调用一次,我们就可以使用匿名内部类的格式简化,这样程序消耗的内存更小
interface Person { public abstract void study(); } class PersonDemo { public void method(Person p) { p.study(); } } class PersonTest { public static void main(String[] args) { PersonDemo pd = new PersonDemo(); pd.method(new Person() { public void study() { System.out.println("好好学习,天天向上"); } }); } }
匿名内部类的面试题(补齐代码)
Interface Inter{ void show();//实际上默认前缀会加上 public abstract } 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().show();//这里要输出"Hello World" } }
分析:主方法当中,Outer并没有进行实例化,而是直接调用方法,所以我们可以直接断定,这个方法肯定是一个静态方法,Outer.method().show(); 这是链式编程的写法,当调用method()之后,如果还要继续调用show()方法,那么method方法一定要给我们返回一个对象,我们才可以使用show()方法,补齐的代码中,new了一个Inter接口,本质上new的是一个接口的实现类的对象,因为接口是不能够直接被实例化的,这个实现类重写了Inter接口的方法,编译看左边,运行看右边.
匿名内部类(掌握)
最新推荐文章于 2023-01-11 23:21:54 发布