在Java中,实现接口主要有以下几种方式:
常规实现方式
定义接口:使用`public interface`关键字定义接口。
实现接口:在类中使用`implements`关键字实现接口,并在类中重写接口里的方法。
调用方法:创建类对象,调用重写后的方法。
```java
// 定义接口
public interface ITest {
public void func1();
}
// 类实现该接口
public class CTest implements ITest {
@Override
public void func1() {
System.out.println("This is func1");
}
}
// 调用类中方法
CTest ct = new CTest();
ct.func1();
```
匿名内部类实现
匿名内部类通常用于简化代码编写,适用于需要继承和实现关系的情况。
通过匿名内部类实现接口时,可以直接在实现接口的代码块中定义方法。
```java
// 定义接口
public interface ITest {
public void func1();
}
// 匿名内部类实现接口
ITest it1 = new ITest() {
@Override
public void func1() {
System.out.println("This is func1 by anonymous");
}
};
it1.func1();
```
Lambda表达式实现
Lambda表达式是Java 8引入的新特性,可以用于实现接口中的单一抽象方法。

Lambda表达式使得代码更加简洁,适用于函数式编程。
```java
// 定义接口
public interface ITest {
public void func1();
}
// Lambda表达式实现接口
ITest it2 = () -> System.out.println("This is func1 by lambda");
it2.func1();
```
使用默认方法
接口中可以有默认方法,使用`default`关键字定义。
默认方法可以解决接口升级问题,被实现类对象直接调用或覆盖重写。
```java
// 定义接口
public interface ITest {
public void func1();
// 默认方法
public default void func2() {
System.out.println("This is func2");
}
}
// 类实现接口
public class CTest implements ITest {
@Override
public void func1() {
System.out.println("This is func1");
}
// 覆盖默认方法
@Override
public void func2() {
System.out.println("This is func2 by CTest");
}
}
// 调用类中方法
CTest ct = new CTest();
ct.func1();
ct.func2();
```
通过以上方式,Java提供了灵活的接口实现机制,既支持传统的类实现方式,也支持现代函数式编程的Lambda表达式和默认方法。根据具体需求选择合适的实现方式可以提高代码的可读性和可维护性。
