为什么抽象类应该实现接口?

时间:2018-02-08 18:09:56

标签: java oop abstract-class

由于抽象类可以包含完整和不完整的方法,因此何时需要实现接口?什么时候应该在抽象类中实现接口?

1 个答案:

答案 0 :(得分:1)

这是OOP如何工作的标准方式。想象一下课程Human。它当然是抽象,因为不可能有人的具体实例。例如,具体实现可以是需要名称和其他信息的类Person

public class Person extends Human {
    String name;
    int age;
}

界面的常见用法是描述能力。在我们的示例中,我们可以使用CanWalkCanBreathCanJumpNeedsWaterHasGender等界面。在这种情况下,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());
        }
    }
}

并且您希望能够将人类传递给该方法,因此您需要实现该接口。