Java匿名内部类学习笔记

匿名内部类的使用条件

如果接口的实现类(或者定义类的子类)只需要使用唯一的一次,那么这种情况下就可以省略掉该类的定义,改为使用匿名内部类

匿名内部类的定义格式

接口名称 对象名 = new 接口名称(){

​ //覆盖重写所有方法

}

定义格式解析

  1. new代表创建对象的动作

  2. 接口名称就是匿名内部类需要实现哪个接口

  3. {…}是匿名内部类的内容

注意事项

  1. 匿名内部类在创建对象时只能使用唯一一次。如果希望多次创建对象,而且类的内容一样的话,那么就必须使用单独定义的类。

  2. 匿名对象在调用方法的时候只能调用唯一一次。如果希望同一个对象调用多次方法,那么必须给对象起个名字。

  3. 匿名内部类时省略了实现类/子类名称,但是匿名对象是省略了对象名称,二者可以混用,但是只能使用一次。

  4. 如果希望匿名内部类实现类似构造器的行为,需要在抽象类中写明构造器,然后通过实例初始化实现(不能使用接口,接口中不允许定义构造方法)。举例:

    abstract class Base {
    	public Base(int i) {
    		System.out.println("Base constructor, i = " + i);
    	}
    
    	public abstract void f();
    }
    
    public class AnonymousConstructor {
    	public static Base getBase(int i) {
    		return new Base(i) {			//通过接口提供的构造器实现
    			{
    				System.out.println("Inside instance initializer");
    			}
    
    			public void f() {
    				System.out.println("In anonymous f()");
    			}
    		};
    	}
    
    	public static void main(String[] args) {
    		Base base = getBase(47);
    		base.f();
    	}
    }
    
  5. 使用匿名内部类一定会向上转型,因为匿名内部类没有类名称,要创建一个符合要求的引用只能使用其基类或接口名称。

  6. 如果一个匿名内部类要使用外部定义的一个变量,那么编译器会强制要求这个变量是final的

  7. 匿名内部类比较常用的场景就是静态工厂方法了,放个链接,讲的很全面了。(虽然静态工厂方法比构造器好用的多,但是也不应该滥用,否则会导致代码冗余,而且会增加内存的开销,一般只有常用的工具类才会使用静态工厂方法)

小结

我在这里才真的感觉到:多态真神奇,你别管我到底是什么东西,你只要知道我有那几个功能就行了,你只管用,别的不用多操心

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值