2010-10-05 86 views
-1

可能重复:
Abstract class and Interface class?当我需要在Java中使用抽象类和接口?

当我需要使用abstract class和interface在Java中?

我的疑问是

  1. 我需要哪些情况下使用抽象类,哪种情况下,我需要使用的界面。
  2. 接口满足抽象类的属性。那么为什么我们需要特别抽象的类?我知道,抽象类包含抽象方法和非抽象方法,但是我们可以使用抽象类作为普通类,那么结果在两个类中都是相同的。普通类也继承了与抽象类相同的类。所以我们为什么需要抽象类。

如果有人知道这个好例子,请回复我。

谢谢。

+0

还强烈建议,在回答这个问题:http://stackoverflow.com/questions/56867/interface-vs-base-class – 2010-10-05 17:47:55

+0

考虑使用抽象类,如果这些声明,适用于您的情况: - 你想要在几个密切相关的类中共享代码。 - 您期望扩展抽象类的类具有许多常用的方法或字段,或者需要公共访问修饰符(例如protected和private)。 - 您想要声明非静态或非最终字段。这使您可以定义可访问和修改其所属对象状态的方法。 – sarath 2014-02-11 17:00:17

回答

0

如果您想通过框架代码应用模板模式http://en.wikipedia.org/wiki/Template_method_pattern,则需要使用抽象类。作为一个经验法则,如果你不打算实现模板模式,你最好用接口,它允许松散耦合,就像Spring框架一样。松耦合导致设计开放,并具有更好的可测试性,像模拟对象(http://easymock.org)

+0

嗨,当我们需要使用重载和覆盖,如果你知道好例子请告诉我。 – Velmurugan 2010-10-05 17:56:30

+0

重载与抽象类和接口无关。重载方法与现有方法具有相同的名称,但具有不同类型或数量的参数。重写正在重新定义一个子类中超类的方法。看到http://stackoverflow.com/questions/154577/polymorphism-vs-overriding-vs-overloading的答案,那里有一个例子。 – 2010-10-05 18:03:26

2

抽象类的另一个重要方面是,不像界面,向它添加新的方法赢得了' t打破二进制兼容性。因此,从API演进的角度来看,尤其是当您可以期望添加公共API时,抽象类更为可取。

1

我会说有两种类型的继承。我会说实施继承和其他合同继承。

抽象类用于实现继承。您可以扩展/更改超级/父级的行为。

接口将用于合同继承。如果你更感兴趣的是让类实现某种契约(带有参数的服务方法 - 更多的是契约),并且行为对于不同的实现是不同的,那么你就不能在抽象类中捆绑并扩展行为。