[英]Why should abstract class implement an interface?
既然抽象类既可以包含完整的方法,也可以包含不完整的方法,那么什么时候需要实现接口呢? 什么时候应该在抽象类中实现接口?
这是 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());
}
}
}
并且您希望能够将您的人员传递给该方法,因此您需要实现该接口。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.