Java 快速理解匿名内部类,以及它的使用场景,注意事项

Java 快速理解匿名内部类

这篇文章主要讲解Java中匿名内部类的使用以及注意事项。匿名:没有名字的意思。内部类:写在其他类内部的类。匿名内部类的作用是简化代码。

原本我们需要创建子类或者实现类,去继承父类和实现接口,才能重写其中的方法。但是有时候我们这样做了,然而子类和实现类却只使用了一次(定义了一个对象)。这个时候我们就可以使用匿名内部类,不用去写子类和实现类,起到简化代码的作用。

匿名内部类的格式:父类/接口  对象 = new 父类/接口(){   重写父类/接口中的方法   };       

这样做就把子类继承父类,重写父类中的方法,创建子类对象,合成了一步完成,减少了其中创建子类的过程。或者将实现类实现接口,重写接口中的方法,创建实现类对象,合成了一步完成,减少了其中创建实现类的过程。下面将会用代码演示如何使用匿名内部类。

 

1.创建使用匿名内部类格式:父类 对象 = new 父类(){   重写父类中的方法   };

 

创建父类

public class Fu {
    public void method(){
        System.out.println("我是父类,你想继承我然后再去重写我的方法?");
    }
}

创建Demo类

使用匿名内部类,直接重写父类的方法,省去创建子类继承父类的过程和创建子类对象的过程。

public class Demo {
    public static void main(String[] args) {
        //创建匿名内部类,直接重写父类的方法,省去了创建子类继承,创建子类对象的过程
     Fu fu= new Fu(){
            @Override
            public void method() { //重写父类method方法
                super.method();
                
            }
        };
     fu.method();   //调用method方法
    }

 

2.创建使用匿名内部类格式:接口 对象=new 接口(){ 重写接口中的方法 };

 

创建接口AnonymousInter

public interface AnonymousInter {
    public abstract void eat();
}

创建Demo1类

使用匿名内部类,直接重写接口中的方法,省去创建实现类实现接口的过程和创建实现类对象的过程。

public class Demo1 {
    public static void main(String[] args) {
        //创建匿名内部类,省区了创建接口的实现类的过程,以及定义实现类对象的过程
        AnonymousInter an=new AnonymousInter() {
            @Override
            public void eat() {  //重写接口的eat方法
                System.out.println("晚饭我吃了");
            }
        };
        an.eat();
    }
}

 

3.由上我们可以总结,匿名内部类在父类和接口中可以起到简化代码的作用。因为可以省去创建子类和实现类的过程。 我们可以直接利用父类和接口得到我们想要的东西,因此匿名内部类的最终产物是 子类/实现类对象。

 

4.如果想了解更多的JAVA知识,可以关注落花一叶知秋博主。博主会跟着大家一起成长。

  • 37
    点赞
  • 72
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
Java内部类是定义在另一个类的类,它可以访问外部类的所有成员,包括私有成员,并且可以使用外部类的引用来访问外部类的成员。内部类有以下几种类型: 1. 成员内部类:定义在外部类的成员位置,可以访问外部类的所有成员。 2. 局部内部类:定义在方法的类,只能在该方法内使用。 3. 匿名内部类:没有类名的内部类,通常用于创建只需要一次的对象。 内部类的使用场景: 1. 封装:内部类可以访问外部类的私有成员,可以实现对外部类成员的封装。 2. 回调函数:内部类可以实现接口,可以作为回调函数使用。 3. 事件驱动编程:内部类可以实现事件监听器接口,可以响应事件。 4. 多继承:内部类可以继承一个类并实现一个接口,实现多重继承。 下面是一个使用内部类的示例: ```java public class OuterClass { private int outerField; public OuterClass(int outerField) { this.outerField = outerField; } public void outerMethod() { final int localField = 0; class LocalInnerClass { public void localMethod() { System.out.println("localField: " + localField); System.out.println("outerField: " + outerField); } } LocalInnerClass localInnerClass = new LocalInnerClass(); localInnerClass.localMethod(); } class MemberInnerClass { public void memberMethod() { System.out.println("outerField: " + outerField); } } public static void main(String[] args) { OuterClass outerClass = new OuterClass(1); outerClass.outerMethod(); OuterClass.MemberInnerClass memberInnerClass = outerClass.new MemberInnerClass(); memberInnerClass.memberMethod(); } } ``` 这个示例包含了成员内部类和局部内部类两种类型的内部类。在outerMethod方法,定义了一个局部内部类LocalInnerClass,它可以访问外部类的局部变量localField和成员变量outerField。在main方法,创建了一个OuterClass对象,并通过该对象创建了一个成员内部类MemberInnerClass的实例。通过成员内部类的实例,可以访问外部类的成员变量outerField。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值