java如何使用接口
接口的定义与声明
在Java中,接口通过interface关键字定义,用于声明一组方法签名(无具体实现)。接口可以包含抽象方法、默认方法(Java 8+)、静态方法(Java 8+)以及常量(默认为public static final)。
public interface Animal {
void eat(); // 抽象方法
default void sleep() { // 默认方法
System.out.println("Sleeping...");
}
static void reproduce() { // 静态方法
System.out.println("Reproducing...");
}
String TYPE = "Mammal"; // 常量
}
接口的实现
类通过implements关键字实现接口,必须重写所有抽象方法(除非是抽象类)。一个类可以实现多个接口。
public class Dog implements Animal {
@Override
public void eat() {
System.out.println("Dog eats bones");
}
}
多接口实现
Java支持多接口实现,通过逗号分隔多个接口名。需注意避免方法签名冲突(如两个接口有同名默认方法时需显式重写)。
public class Bird implements Flyable, Singable {
@Override
public void fly() { /* 实现Flyable的方法 */ }
@Override
public void sing() { /* 实现Singable的方法 */ }
}
默认方法的使用
默认方法允许接口提供默认实现,避免破坏现有代码。实现类可以直接继承默认方法,也可选择重写。
public interface Vehicle {
default void start() {
System.out.println("Vehicle started");
}
}
public class Car implements Vehicle {} // 直接继承默认方法
静态方法的调用
接口的静态方法通过接口名直接调用,不能被实现类继承或重写。
Animal.reproduce(); // 调用接口静态方法
接口的继承
接口可以继承其他接口(支持多继承),子接口会继承父接口的所有方法。
public interface FlyingAnimal extends Animal, Flyable {
void glide();
}
接口与多态
接口支持多态特性,可通过接口类型引用实现类对象,实现运行时绑定。
Animal myPet = new Dog();
myPet.eat(); // 调用Dog类的eat()
标记接口
空接口(如Serializable)用于标记类具有某些特性,通常通过反射机制检查。
public class Data implements Serializable {} // 标记可序列化
函数式接口(Java 8+)
仅包含一个抽象方法的接口可用@FunctionalInterface注解标记,支持Lambda表达式。
@FunctionalInterface
public interface Calculator {
int calculate(int a, int b);
}
// 使用Lambda实现
Calculator add = (x, y) -> x + y;
接口与抽象类的区别
- 接口:多重继承、无状态(无实例变量)、方法默认
public。 - 抽象类:单继承、可包含状态(字段)、方法可设访问修饰符。
最佳实践
- 优先使用接口定义行为契约。
- 默认方法用于向后兼容,避免过度使用。
- 常量建议使用枚举或单独工具类替代接口常量。






