Java接口是Java语言中的一个重要概念,它提供了一种定义抽象类型的方式,可以用于实现多态和解耦,Java接口有三种形式:普通接口、标记接口和功能接口,下面我们来详细探讨这三种形式及其应用场景。

1. 普通接口
普通接口是最常见的接口形式,它包含一组抽象方法,用于定义某个类型的公共行为,普通接口可以被类实现(implement),也可以被其他接口继承(extend)。
应用场景
普通接口通常用于定义一组具有相似行为的类的共同规范,我们可以定义一个Drawable接口,包含draw()方法,然后让所有需要绘制的类实现这个接口。
public interface Drawable {
void draw();
}
public class Circle implements Drawable {
@Override
public void draw() {
System.out.println("Drawing a circle");
}
}
public class Rectangle implements Drawable {
@Override
public void draw() {
System.out.println("Drawing a rectangle");
}
}
2. 标记接口
标记接口是一种不包含任何方法的接口,它的作用是为类提供一个类型标识,标记接口通常用于表示某个类具有某种特定的属性或者行为。
应用场景
标记接口常用于实现类似于“元数据”的功能,我们可以定义一个Serializable接口,表示一个类可以被序列化。
public interface Serializable {
// No methods
}
public class Person implements Serializable {
// ...
}
3. 功能接口
功能接口是一种特殊的接口,它包含一个且仅包含一个抽象方法,功能接口主要用于定义函数式编程中的函数对象。
应用场景
功能接口常用于实现函数式编程中的高阶函数,我们可以定义一个Predicate接口,用于判断某个条件是否成立。
@FunctionalInterface public interface Predicate{ boolean test(T t); } public static void filter(List list, Predicate predicate) { List result = new ArrayList<>(); for (T item : list) { if (predicate.test(item)) { result.add(item); } } return result; }
相关问题与解答
问题1:普通接口和标记接口有什么区别?
答:普通接口包含抽象方法,用于定义一组具有相似行为的类的共同规范;而标记接口不包含任何方法,仅用于为类提供一个类型标识。
问题2:功能接口在函数式编程中有什么作用?
答:功能接口用于定义函数式编程中的函数对象,可以实现高阶函数,通过使用功能接口,我们可以将函数作为参数传递给其他函数,实现更加灵活和简洁的代码。