这是 OOP 工作方式的标准方式。想象一个班级Human。这当然是抽象,因为不可能有人类的具体实例。例如,一个具体的实现可能是一个需要名称和一些其他信息的类Person。
public class Person extends Human {
String name;
int age;
}
接口的一个常见用法是描述能力。在我们的示例中,我们可以有CanWalk、CanBreath、CanJump、NeedsWater、HasGender 等接口。在这种情况下,Human 可以实现所有这些接口,那就太好了。
public abstract class Human implements CanWalk,
CanBreath, CanJump, NeedsWater, HasGender {
...
}
这些接口现在有了方法,比如
public interface HasGender {
String getGender();
}
而Human 可以实现它们,但是作为一个抽象的人没有具体的性别,它可以将实现委托给它的实现类Person:
public class Person extends Human {
String name;
int age;
String gender;
@Override
public String getGender() {
return gender;
}
}
另一方面,Human 可能会提供一些接口,例如
public interface NeedsWater {
int amountOfWaterNeeded();
void drink(int amount);
}
public abstract class Human implements CanWalk,
CanBreath, CanJump, NeedsWater, HasGender {
@Override
public int amountOfWaterNeeded() {
return 10;
}
}
最后,我们可能会有使用接口的类。喜欢
public class WaterDistributor {
public void distributeWaterTo(Iterable<NeedsWater> consumers) {
for (NeedsWater c : consumers) {
c.drink(c.amountOfWaterNeeded());
}
}
}
并且您希望能够将您的人传递给该方法,因此您需要实现接口。