1

带有接口的代码

/* FileName : cat SampleInterface.java */
public interface SampleInterface
{
        public void draw();
        public void color();
}

带有抽象方法的代码

/* FileName : SampleAbstractMethod.java  */
abstract class SampleAbstractMethod
{
        public abstract void draw();
        public abstract void color();
}

它们在哪些方面不同?

肯定会有很大的不同,如果抽象方法足够,Java 开发人员就不会引入接口。我看到的共同点是

  1. 两者都不能有定义,就像我发布的代码一样。

  2. 继承或实现类必须引入定义。

现在据我所知,抽象方法可以做接口可以做的事情,那为什么要有接口呢?,接口有什么特别之处而抽象方法不能做?究竟出于什么原因需要和接口?

编辑:我的问题是关于抽象方法和接口之间的区别,而不是abstract classes重复链接指向我。所以请解释我的问题与标记的重复项有何相似之处。

4

5 回答 5

2

抽象类仅在存在“是”关系时使用;接口可以由没有任何共同点的类来实现。

抽象类可以实现方法;接口不能实现方法。

接口只能描述常量值和方法,而不能实现。接口的所有方法都是public abstract默认的,变量是public static final.

Java中的类可以继承(实现)许多接口,但只能继承一个抽象类。

使用抽象类,您将失去继承它的类的个性。使用接口,您只需扩大每个类的功能。

界面的示例是“飞行”:蝴蝶、鸟或飞机。抽象类的示例是“游戏”:足球、板球或国际象棋。

更新: 关于方法,你可以在接口和抽象类中都有抽象方法。你只需要选择在哪里使用它们。这个问题会导致您了解接口和抽象类之间的差异。

于 2013-09-29T13:03:18.280 回答
1

抽象类可能有非抽象方法,而接口只能有方法声明。在某些情况下,您需要一个具有某些功能的抽象类,但它的子类必须实现其抽象方法。一个类可以实现多个接口,但可以从 1 个抽象类继承。

于 2013-09-29T12:56:48.157 回答
1

一切都与可能性有关;-)

在接口中,您只能进行函数声明。所以它在某种程度上是一个限制,你甚至不能定义变量(你可以常量)......

在抽象类中,你可以两者都做!您可以使用或不使用源代码的功能。你可以有变量等等......

最重要的是您只能使用一个抽象类作为父类,但可以使用任意数量的父接口。

所以这真的是一个问题,你需要什么以及如何利用OOP概念。

如果您只是想减少代码,可以不假思索地使用它,但是如果您想让某些东西更可靠,请阅读有关子类型的更多信息

于 2013-09-29T13:18:57.167 回答
1

您的问题是关于抽象方法和接口之间的区别。但是我认为您忘记了接口中的所有方法都是抽象的一件事。所以接口和抽象中的方法是相同的。

嗯,对接口的需求是为了满足多重继承的需求。当您需要创建一个具体的类时使用抽象类,但要确保所有子类中有一些共同的状态或某些操作可能有共同的实现。

于 2013-09-29T13:39:36.410 回答
0

查看 Oracle 的官方文档:http: //docs.oracle.com/javase/tutorial/java/IandI/abstract.html(抽象类)和http://docs.oracle.com/javase/tutorial/java /IandI/createinterface.html(接口)。

这是 Stack Overflow 上关于抽象类与接口的精彩讨论:Java 中的抽象类与接口

于 2013-09-29T13:04:21.760 回答