package com.hspedu.anonymousInnerclass_;
public class Course415 {
public static void main(String[] args) {
// 匿名内部类(重要)
// (1)是一个类(2)内部类(3)没有名字,系统有分配隐藏的(4)同时是一个对象
/*
* 1、语法:
* new 类/接口(参数列表) {
* ...
* }
* */
Outer04 outer04 = new Outer04();
outer04.method();
}
}
class Outer04 {
private int n1 = 10;
public void method() {
// 基于接口的匿名内部类
// 需求:使用IA接口,并创建对象 1.传统方法,如果tiger/dog只使用一次
// Tiger tiger = new Tiger();
// tiger.cry();
Dog dog = new Dog();
dog.cry();
// 2.匿名内部类方法
/*
* tiger的编译类型是IA,tiger的运行类型是匿名内部类,
* 底层是一个类实现了IA接口,class XXX implements IA {...}
* 这个匿名内部类的名字是 外部类名+$1 ,也就是Outer04$1
* jdk底层创建了匿名内部类,Outer04$1,同时创建了实例
* 匿名内部类使用一次就不能再使用了(没办法再new这个对象了),这个对象还可以使用
* */
IA tiger = new IA() {
@Override
public void cry() {
System.out.println("tiger cry");
System.out.println();
}
};
System.out.println("tiger的运行类型:" + tiger.getClass()); // getClass获取对象的运行类型
tiger.cry();
}
}
interface IA {
public void cry();
}
class Tiger implements IA {
@Override
public void cry() {
System.out.println("tiger cry..");
}
}
class Dog implements IA {
@Override
public void cry() {
System.out.println("dog cry..");
}
}
class Father {
public Father(String name) {
}
public void test() {
}
}