/* 匿名内部类:没有类名的类就称作为匿名内部类。 匿名内部类的好处:简化书写。 匿名内部类的使用前提:必须存在继承或者实现关系才能使用。 匿名内部类一般是用于实参。 */ abstract class Animal{ public abstract Animal run(); public abstract void sleep(); } class Outer{ public void print(){ //需求: 在方法内部定义一个类继承Animal类,然后调用run方法与sleep()。 /* //局部内部类 class Dog extends Animal{ public void run(){ System.out.println("狗在跑.."); } public void sleep(){ System.out.println("狗趴在睁开眼睛睡.."); } } //创建对象 Dog d = new Dog(); d.run(); d.sleep(); */ //匿名内部类 :匿名内部类只是没有类名,其他的一概成员都是具备的。 // 匿名内部类与Animal是继承 的关系。 目前是创建Animal子类的对象. Animal a = new Animal(){ //多态 //匿名内部的成员 public Animal run(){ System.out.println("狗在跑.."); return this; } public void sleep(){ System.out.println("狗趴在睁开眼睛睡.."); } //特有的方法 public void bite(){ System.out.println("狗在咬人.."); } }; a.bite(); a.run(); a.sleep(); } } class Demo6 { public static void main(String[] args) { //System.out.println("Hello World!"); Outer outer = new Outer(); outer.print(); } }
//实现关系下匿名内部类 interface Dao{ public void add(); } class Outer{ public void print(){ //创建一个匿名内部类的对象 new Dao(){ //不是接口不能创建对象吗?怎么现在又可以了? public void add(){ System.out.println("添加成功"); } }.add(); } } class Demo7 { public static void main(String[] args) { test(new Dao(){ public void add(){ System.out.println("添加员工成功"); } }); } //调用这个方法... public static void test(Dao d){ //形参类型是一个接口引用.. d.add(); } }