接口和抽象方法在用法上是否相似?

Are Interface and Abstract Methods similar in usage?

我在 Stack 上阅读了很多链接,例如 this question,我决定问一下。

当我在 Java 中创建一个抽象形状 Class 时,我认为 Class 必须有一个方法来 getArea()

我认为有两种方式。

public abstract class Shape
{
    public abstract double getArea();
}

当我从 Shape 创建扩展 class 时,我在扩展 classes.

中重新定义了 getArea()

那么我可以像这样使用 Interface 创建这个层次结构吗?

public interface Contain
{
    public double getArea();
}

并像这样创建 class :

public abstract class Shape implements Contain
{
...
}

然后重新定义 getArea() 以扩展 class 形状。

我有点困惑。

在使用接口和抽象方法之间做出决定的最佳方式是什么?

以迂回的方式,是的,它们的用法是 "similar"。更重要的是抽象 classinterface.

之间的比较

接口 是一组预定义的方法存根,可以在 class 中实现,并且可以在没有继承的情况下被覆盖。

一个抽象class是一个class,具有无法实例化的定义值和方法,目的是inheriting/extending没有其他非抽象 classes.

例如,您可以有一个名为 Animals 的抽象 class,其方法完全由变量和数据成员编写和定义,但您必须首先扩展此 Animals class 说...Lion class 不是抽象的,能够实例化和使用这些方法和数据成员。

对于 interfaces,我将使用收音机作为示例。您可以有一个名为 RadioSystem 的接口,它具有用于更改频率、从 FM 切换到 AM 以及从 AM 切换到 AM 等的方法存根,然后将其实现到另一个 class,比如说...CarRadio 以便它已经定义了所有方法存根和预定义的功能,那么作为程序员,您只需要以最适合 class 实现它们的方式编写这些方法。

我会通过考虑 class 是否有任何基本实现 在接口和抽象 Class 与一个抽象方法之间做出决定。这些基本实现只有使用抽象 Class 才有可能,所以我会选择抽象 Class。否则,我会选择一个接口。这取决于您尝试建模的领域。