为什么需要java中的接口?

时间:2013-09-29 12:52:40

标签: java interface abstract

带接口的代码

/* 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. 继承或实现类必须引入定义。

  3. 现在我看到它抽象方法可以做什么接口,那么为什么要有接口?,抽象方法不能做的接口有什么特别之处?出于什么原因需要和界面?

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

5 个答案:

答案 0 :(得分:2)

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

抽象类可以实现方法;界面无法实现方法。

接口只能描述常量值和方法,但不能实现它们。默认情况下,接口的所有方法都是public abstract,变量是public static final

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

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

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

<强>更新 对于方法,您可以在接口和抽象类中使用抽象方法。您只需选择使用它们的位置即可。而这个问题会让你看到接口和抽象类之间的差异。

答案 1 :(得分:1)

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

答案 2 :(得分:1)

关于这种可能性的一切; - )

在界面中,您只能进行功能声明。所以它以某种方式限制你甚至无法定义变量(你可以使用常量)......

在抽象课程中,你可以做到这两点!您可以使用包含和不包含源代码的功能。你可以有变量等......

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

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

如果您只是想减少代码,可以不假思索地使用它,但是如果您想要更可靠的东西,请阅读更多关于Subtyping的信息

答案 3 :(得分:1)

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

嗯,对接口的需求是满足多重继承的需要。 当您需要创建具体类时使用抽象类,但希望确保所有子类中存在某种公共状态或某些操作可能的常见实现。

答案 4 :(得分:0)

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

以下是Stack Overflow关于抽象类与接口的讨论:Abstract class vs Interface in Java