> 文章列表 > Java学习之匿名内部类(非常重要)

Java学习之匿名内部类(非常重要)

Java学习之匿名内部类(非常重要)

目录

一、匿名内部类介绍

基本语法

 二、举例说明

1.传统方式实现接口

 2.使用匿名内部类进行简化


一、匿名内部类介绍

1.匿名内部类也是类

2.匿名内部类也是内部类

3.匿名内部类没有名字(名字存在于JVM中,不会显示出来)

4.匿名内部类同时还是一个对象

基本语法

 二、举例说明

1.传统方式实现接口

package com.hspedu.innerclass;/*** 演示匿名内部类的使用*/
public class AnonymousInnerClass01 {public static void main(String[] args) {Outer04 outer04 = new Outer04();outer04.method();}
}class Outer04 { //外部类private int n1 = 10;//属性public void method() {//方法//基于接口的匿名内部类//1.需求:想使用接口IA,并创建对象//2.传统方式:,实现该接口,并创建对象实例IA tiger = new Tiger();//接口的多态tiger.cry();}}interface IA {//接口public void cry();
}
class Tiger implements IA{@Overridepublic void cry() {System.out.println("老虎叫唤...");}
}

同理,如果Dog类实现了接口IA,那么也是同样的流程

 2.使用匿名内部类进行简化

package com.hspedu.innerclass;/*** 演示匿名内部类的使用*/
public class AnonymousInnerClass01 {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.需求:Tiger/Dog类只使用一次,以后再也不使用//4.使用匿名内部类简化开发
//        IA tiger = new Tiger();//接口的多态
//        tiger.cry();IA tiger = new IA(){@Overridepublic void cry() {System.out.println("老虎叫唤...");}};tiger.cry();}}interface IA {//接口public void cry();
}
    IA tiger =  new IA(){@Overridepublic void cry() {System.out.println("老虎叫唤...");}};

上述代码是一个对象实例,是实现了IA接口的匿名内部类的对象实例

而真正的匿名内部类的内容是

        {@Overridepublic void cry() {System.out.println("老虎叫唤...");}}

这个类是没有名字的,即匿名的

对象tiger的编译类型和运行类型

5.编译类型:IA

6.运行类型:匿名内部类,可以通过getClass()方法得到匿名内部类在JVM中的名字

运行结果

Outer04$1:即外部类+ $ + 序号

也就是说匿名内部类在底层的代码是

            class Outer04$1 implements IA {@Overridepublic void cry() {System.out.println("老虎叫唤...");}}

7. jdk 底层在创建匿名内部类 Outer04$1,立即马上就创建了 Outer04$1 实例, 并且把地址
返回给 tiger
8. 匿名内部类使用一次, 就不能再使用,但是创建的对象可以多次使用