由于抽象类可以包含完整和不完整的方法,因此何时需要实现接口?什么时候应该在抽象类中实现接口?
答案 0 :(得分:1)
这是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());
}
}
}
并且您希望能够将人类传递给该方法,因此您需要实现该接口。