Java - 如果你可以扩展任何类,那么一些是抽象的重点是什么?

时间:2012-04-10 22:40:08

标签: java interface abstract-class extends

所以抽象类可以扩展,但任何类都可以吗?那么为什么一些特定的类抽象而另一些不抽象呢?

此外,我试图弄清楚,但我总是感到困惑,但是接口和抽象类之间的实际区别是什么?

感谢任何能为我解决此事的人!

3 个答案:

答案 0 :(得分:7)

界面只能描述方法签名,例如

public void add(int a, int b);

实现它的类必须定义方法。

抽象类只能被继承,但它仍然可以定义一个方法:

public void add(int a, int b) {
    return a+b;
}

任何实现它的类都可以使用该方法。抽象类也可以实现final方法,因此它们永远不会被扩展它的类重新实现。

答案 1 :(得分:5)

抽象类的用处是对几个类共有的功能(包括方法和属性)进行分解。另外,说任何类都可以扩展,最终类不能扩展是不正确的。

抽象类与接口不同,因为接口只定义了一个功能合同: 需要完成什么,但从不指示 如何实现它,而抽象类可以充实一些通用的抽象实现细节,但是将具体方面保持开放以由其子类实现。在某种程度上,抽象类就像是接口和具体类之间的中间点。

答案 2 :(得分:5)

抽象类的意义是有意义的默认行为。

抽象类可以在那些有意义的方法中提供有意义的默认实现,并且只留下抽象方法供客户端实现。如果客户希望,客户​​可以选择覆盖这些默认实现

接口没有提供这样的机会;它们都是必须由客户实施的抽象方法。

这不是一个或两个命题;通常都提供。例如,请参阅java.util.Mapjava.util.AbstractMap