• Java8 改进的匿名内部类:


    1、匿名内部类适合创建那种只需要一次使用的类

    2、匿名内部类定义格式:

    new 实现接口() | 父类构造器(实参列表){
     //匿名内部类类体部分      
    }
    

     3、从上面定义格式可以看出,匿名内部类必须实现一个接口,或继承一个父类,并且只可以实现一个接口,或实现一个父类

    4、匿名内部类不能定义为抽象类,因为定义匿名内部类时,会立即创建匿名内部类的对象,因此不能定义为抽象类

    5、匿名内部类不能定义构造器,因为匿名内部类没有类名,所以无法定义构造器,但可以定义初始化块,可以通过实例初始化,来完成构造器需要完成的事情

    6、最常用的创建匿名内部类方式是:需要创建某个接口类型的对象

    代码1:用实现类实现

    //-定义一个接口
    interface Product{
    	public double getPrice();
    	public String getName();
    }
    
    //-实现接口
    class AnonymouseProduct implements Product{
    	public double getPrice(){
    		return 20.5;
    	}
    	
    	public String getName(){
    		return "游戏机";
    	}
    }
    
    public class AnonymouseTest{
    	//-与接口耦合
    	public void test(Product p){
    		System.out.println("张三买了一个"+p.getName()+",消费了"+p.getPrice()+"美元!");
    	}
    	
    	public static void main(String[] args){
    		//-多态方式创建实现类实例
    		new AnonymouseTest().test(new AnonymouseProduct());
    	}
    }
    

     运行结果:

    代码2:用匿名类实现

    //-定义接口
    interface Product{
    	public double getPrice();
    	public String getName();
    }
    
    public class AnonymouseTest{
    	//-与接口耦合
    	public void test(Product p){
    		System.out.println("张三买了一个"+p.getName()+",消费了"+p.getPrice()+"美元!");
    	}
    
    	public static void main(String[] args){
    		AnonymouseTest at=new AnonymouseTest();
    		//-通过匿名类实现接口
    		at.test(new Product(){
    			public double getPrice(){
    				return 20.5;
    			}
    	
    			public String getName(){
    				return "游戏机";
    			}
    		});
    	}
    }
    

     运行效果:

    代码3:用匿名类实现

    继承父类来创建匿名内部类

  • 相关阅读:
    675 对象的引用-浅拷贝-深拷贝
    674 vue3侦听器watch
    673 vue计算属性:缓存,setter和getter
    明明有了promise,为啥还需要async await?
    Js常用数组方法汇总
    一些非常有用的Js单行代码
    Js获取验证码倒计时
    前端截取字符串:JS截取字符串之substring、substr和slice详解
    javascript全局变量与局部变量
    JS实现快速排序算法
  • 原文地址:https://www.cnblogs.com/baby-zhude/p/8321617.html
Copyright © 2020-2023  润新知