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{
    @Override
    public 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(){
            @Override
            public void cry() {
                System.out.println("老虎叫唤...");
            }
        };
        tiger.cry();


    }

}

interface IA {//接口

    public void cry();
}
    IA tiger =  new IA(){
            @Override
            public void cry() {
                System.out.println("老虎叫唤...");
            }
        };

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

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

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

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

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

5.编译类型:IA

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

运行结果

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

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

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

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

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值