演示匿名内部类的使用,很重要
package com.shedu.Inner;/*** 演示匿名内部类的使用*/
public class AnonymousInnerClass {//外部其他类public static void main(String[] args) {Outer04 outer04 = new Outer04();outer04.method();}
}class Outer04{//外部类private int n1 = 10;//属性public void method(){//方法//基于接口的匿名内部类//1.需求:想使用IA接口,并创建对象//2.传统方式,是写一个类,实现该接口,并创建对象//3.如果我们的需求是这个类只使用一个,后面不再使用//4.可以使用匿名内部类来简化开发//5.tiger的编译类型 :IA//6.tiger的运行类型:匿名内部类 类名:Outer04$1/*底层 会分配 类名 Outer04$1class Outer04$1 implements IA{@Overridepublic void cry() {System.out.println("老虎叫");}}*///7.jdk底层会在创建匿名内部类Outer04$1后,// 立刻马上就创建了Outer04$1实例,并把地址返回给tiger//8.匿名内部类使用一次后,就不能使用了IA tiger = new IA(){@Overridepublic void cry() {System.out.println("老虎叫");}};System.out.println("匿名内部类的运行类型:"+tiger.getClass());tiger.cry();//演示基于类的匿名内部类//1.father的编译类型 Father//2.father的运行类型 Outer0$2//3.底层创建匿名内部类/*底层 会分配 类名 Outer04$2class Outer04$2 implements Father{@Overridepublic void test() {System.out.println("匿名内部类重写了test方法");}}*///4.同时也直接返回类匿名内部类Outer04$1的对象//5.注意(“abc”)参数列表会传递给构造器Father father = new Father("abc"){@Overridepublic void test() {System.out.println("匿名内部类重写了test方法");}};System.out.println("father对象的运行类型:"+father.getClass());father.test();//基于抽象类的匿名内部类Animal animal = new Animal(){@Overridevoid eat() {System.out.println("动物吃");}};animal.eat();System.out.println("animal对象的运行类型:"+animal.getClass());}
}
interface IA{//接口void cry();
}
class Father{public Father(String name) {//构造器}public void test(){}
}abstract class Animal{//抽象类abstract void eat();}