并确保与旧版本接口编写的代码具有兼容性。使用默认方法和静态方法可以增强Comparator接口,使开发人员能够更容易指定排序条件。接口概述使用场景 考虑使用接口的场景包括:定义对象之间的关系、实现多重继承、定义对象的集合和定义函数式接口等。参考链接:docs.oracle.com/javase/...
Java中interface接口定义用法示例官方详解
Java接口的定义及使用示例详解
定义接口
一个接口声明由修饰符、关键字interface、接口名称、以逗号分隔的父接口列表(如果有)和接口体组成。例如:
public interface InterfaceName {
// interface body
}
访问修饰符为public时,接口可被任何包中的任何类使用。若未指定访问修饰符,则接口仅能在同一包中的类访问。
接口可以扩展其他接口。接口声明包括一个逗号分隔的所有它扩展的接口列表。
接口体包括抽象方法、默认方法和静态方法。抽象方法后面跟着一个分号,但不包含实现。默认方法用default修饰符定义,静态方法用static关键字定义。所有抽象、默认和静态方法都隐式地是public的。
接口还可以包含常量声明。所有在接口中定义的常量值都隐式地是public、static和final的。
实现接口
要声明一个实现接口的类,需要在类声明中包含一个implements子句。类可以实现多个接口,因此implements关键字后面跟着一个逗号分隔的接口列表,表示实现的接口。如果类有extends子句,implements子句应位于其后面。
示例接口:Relatable
考虑一个定义如何比较对象大小的接口。
public interface Relatable {
boolean isLargerThan(Object other);
}
实现Relatable接口
以下是在"创建对象"部分中介绍的Rectangle类的重写版本,以实现Relatable接口。
public class RectanglePlus implements Relatable {
// RectanglePlus实现Relatable接口的isLargerThan方法
}
使用接口作为类型
当定义新的接口时,实际上是在定义一个新的引用数据类型。可以在任何可以使用其他数据类型名称的地方使用接口名称。如果定义类型为接口的引用变量,分配给它的任何对象必须是实现该接口的类的实例。
接口的扩展
假设开发了名为DoIt的接口:
public interface DoIt {
void doIt();
}
若想向DoIt接口添加第三个方法,变为:
public interface DoItPlus {
void doIt();
void doItAgain();
}
实现旧DoIt接口的所有类会出错,因此,应创建扩展DoIt的DoItPlus接口,或向接口添加默认方法。使用默认方法,用户可以选择继续使用旧接口或升级到新接口。
默认方法
默认方法允许向库接口添加新功能,确保与较旧版本接口编写的代码具有兼容性。使用默认方法,可以向接口添加接受lambda表达式的参数方法。
静态方法
在接口中定义静态方法,使更容易在库中组织辅助方法。静态方法与定义它的类相关联,而不是与任何对象相关联。接口中的所有静态方法都隐式地是public的。
将默认方法集成到现有库中
默认方法使库接口能够添加新功能,并确保与旧版本接口编写的代码具有兼容性。使用默认方法和静态方法可以增强Comparator接口,使开发人员能够更容易指定排序条件。
接口概述使用场景
考虑使用接口的场景包括:定义对象之间的关系、实现多重继承、定义对象的集合和定义函数式接口等。
参考链接:docs.oracle.com/javase/...2024-10-11