Java 匿名内部类

正常情况下我们实现一个接口需要定义一个类去实现。

举个例子:

interface A{
    b();
    c();
}

class B implements A{
    b(){...};
    c(){...};
}

A a = new B(); 接口多态
a.b();
a.c();

那现在不想定义一个类,就可以使用匿名内部类来实现接口。

 匿名内部类
        语句定义格式:
                new 类名(可以是抽象类也可以具体的类)/接口(){
                    要重写的方法;
                };

那上述例子就可以改进为:

interface A
{ b(); 
  c(); 
} 
//使用匿名内部类的形式创建对象调用b方法
new A(){
   b(){...}
   c(){...}
    }.b();

很明显减少了代码量。

匿名内部类存在的前提:
        要存在一个类或者是一个接口,这个类可以是具体的类也可以是抽象的类。


想一想,我现在的接口中,只有两个方法,方法的个数比较少,没调用一个方法,都要new一下,并且new之后的内容都是一样的。如果以后接口中的方法很多的时候,你再用这样的方法,就会很麻烦。怎么改进呢?
       利用接口多态的形式给匿名内部类起名字。

A a = new A(){
        b(){...}
        c(){...}
    };

a.b();//调用b()方法

a.c();//调用c()方法


匿名内部类在开发中的使用

直接看代码:

 

interface Person{
    public abstract void study();
}

class PersonDemo{
    Person person; // Person person = new ..();
    PersonDemo(Person person){ // Person person = new Student();
        this.person = person;
    }

    public void fun(Person person){
        person.study();
    }
}

public class InnerClassDemo8 {
    public static void main(String[] args) {

        //使用匿名内部类的形式创建对象
        Person person = new Person() {
            @Override
            public void study() {
                System.out.println("好好学习");
            }
        };
        person.study();


        //使用匿名内部类进行方法传参
        PersonDemo personDemo = new PersonDemo(new Person() {
            @Override
            public void study() {
                System.out.println("这是匿名内部类使用带参构造方法");
            }
        });

        new PersonDemo(new Person() {
            @Override
            public void study() {
                System.out.println("这是匿名内部类使用带参构造方法");
            }
        }).fun(new Person() {
            @Override
            public void study() {
                System.out.println("好好学习天天向上2");
            }
        });


        new PersonDemo(new Person() {
            @Override
            public void study() {
                System.out.println("这是匿名内部类使用带参构造方法");
            }
        }).person.study();

    }
}

结果:

 好好学习
好好学习天天向上2
这是匿名内部类使用带参构造方法

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值