第6章 接口,lambda表达式与内部类

本文详细介绍了Java中的接口、lambda表达式、函数式接口类和内部类。重点讲解了Java SE8的新特性,如接口中的default方法和static方法,以及lambda表达式的使用,包括方法引用和构造器引用。同时,探讨了内部类的访问规则,特别是非静态内部类和静态内部类的差异,以及局部内部类和匿名内部类的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、接口

  1. 接口的引入

    类想要获得某项服务,必须得遵从(实现)一个接口。
    例如:类T必须实现了Comparable接口,Arrays.sort方法才能对类T的对象数组T[] 进行排序。
    分析:Arrays.sort方法中会调用T的compareTo方法,显然在调用前编译器必须确保compareTo方法在T中是存在的,而当T实现了Comparable接口时一定满足这个条件。

    -> episode
    父类和子类覆盖重写compareTo方法,有两种比较逻辑:

    • 只支持同类对象之间进行比较,父类和子类之间不允许比较:
      采用getClass()方法判断调用者和传入的参数类型是否一致。

    • 由父类统一进行比较,在父类中定义compareTo方法,并限定为final,子类不能重写:
      采用instanceof关键字判断传入的类型是不是属于父类类型或其子类。

  2. 接口的特性

    接口中的所有方法均自动属于public。
    接口中的所有域自动属于public static final类型(编译期常量)。
    接口中的所有内部类自动属于public static类型。

    Java SE8新特性
    1).采用default关键字可以在接口中定义一个实现了的方法。
    2).在接口中定义static方法。

  3. default方法的二义性问题

    1).若一个类A实现的两个接口B和C当中存在一个相同的default方法defaultMethod,则类A必须给出defaultMethod的实现。
    2).若1中是一个接口B和一个类D,则遵从“类优先原则”,不要求A给出defaultMethod的实现。

二、lambda表达式

回调:某个特定事件发生时会调用某段操作。

  1. 为什么要引入lambda表达式?

    实现将一个代码块传递给对象,这个代码块会在将来某个时间被调用。

	Arrays.sort(words,new Comparator<String>() {
   
   
	@Override
		public int compare(String o1, String o2) {
   
   
			// compare  
		    .....
			return 0;
		}
	});
  • 函数式接口:只有一个抽象方法method的接口。

    lambda表达式用于转化为函数式接口,当做method的执行体,若method有返回值时,lambda表达式的结果自动返回,无需使用return关键字。
    lambda表达式可以看做是一个函数,而不是一个对象。

  • 使用方法:把lambda表达式作为方法的参数传入。

 Arrays.sort(words,
         (String first,String second) -> first.length() - second.length());
  • 语法:
    形参类型结合上下文可推导出时可省略,即为(first,second) -> …
    只有一个形参,且形参类型确定时,可省略() ,即为event -> …
    若无形参时,需要保留(),即为() -> …

    </
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值