【问题标题】:Why should abstract class implement an interface?为什么抽象类要实现接口?
【发布时间】:2018-07-19 09:54:57
【问题描述】:

既然抽象类既可以包含完整方法也可以包含不完整方法,那么什么时候需要实现接口呢?什么时候应该在抽象类中实现接口?

【问题讨论】:

  • 做一些谷歌搜索“java,编程到接口”。本质上,这是因为当您向接口添加方法时,抽象类的扩展将不需要实现这些方法,因为您将在抽象类中实现它们,从而使您不必为了编译而做大量工作.考虑向接口添加方法,然后必须在 185 个子类中实现它。呸。相反,在接口中声明方法,在抽象类中实现它,并且让子级保持不变。
  • 您的问题标题将以粗体字显示。让它全部大写是不必要的,并且使它更难阅读。 (在 21 世纪,这里基本上不需要全部大写。)
  • @T.J.Crowder 他们是。模因伴侣,模因。
  • 标准,伴侣,标准。不要把你的标题全部大写。
  • 感谢您对我的问题的快速回复并感谢您的建议。

标签: java oop abstract-class


【解决方案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());
        }
    }
}

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

【讨论】:

    猜你喜欢
    • 2013-02-15
    • 1970-01-01
    • 1970-01-01
    • 2014-03-18
    • 2011-01-23
    • 2012-07-17
    • 2011-02-11
    • 2015-11-24
    • 2011-12-23
    相关资源
    最近更新 更多