package day27_内部类.匿名内部类; /* * 匿名内部类: * 可以把匿名内部类看成是一个没有名字的局部内部类 * 定义在方法当中 * 必须在定义匿名内部类的时候创建他的对象 * 格式: * new 类/接口(){ * 如果是创建了继承这个类的子类对象,我们可以重写父类的方法 * 如果是创建了实现这个接口的子类对象,我们必须要实现该接口的所有方法 * }; * 原理:而是创建了继承这个类的子类对象或者是创建了实现这个接口的子类对象 * */ public class InnerDemo3 { public static void main(String[] args) { Dog d = new Dog(); d.fun(); } } class Animal { public void eat() { System.out.println("吃东西"); } } //正常写法 class Cat extends Animal { @Override public void eat() { System.out.println("猫吃鱼"); } } //匿名内部类(没有名字的局部内部类)写法 class Dog { public void fun() { /*new Animal() { @Override public void eat() { System.out.println("狗吃肉"); } }.eat(); */ Animal a = new Animal() { @Override public void eat() { System.out.println("狗吃肉"); } }; a.eat(); a.eat(); } }
输出
二、new 接口
public class InnerDemo4 { public static void main(String[] args) { Outer o = new Outer(); o.method(); } } interface Inner { public void fun(); } class Outer { public void method() { /* new Inner() { @Override public void fun() { System.out.println("i am fun"); } }.fun(); */ Inner i = new Inner() { @Override public void fun() { System.out.println("i am fun"); } }; i.fun(); i.fun(); } }
输出