0

我们可以有一个具体的超类,然后是一个抽象的子类吗?有人可以解释一下它是如何工作的吗?

谢谢你

4

4 回答 4

3

这已经发生在任何地方,因为所有类都直接或间接继承自Object. 例如AbstractCollection,一个抽象类继承自具体类Object

这没有什么特别的。抽象类的具体子类仍然必须实现抽象方法。

于 2013-06-22T08:45:16.560 回答
2

你可以拥有它是的。抽象类的唯一限制是:

  1. 继承时,必须实现抽象方法,或者继承的类也必须是抽象的。

  2. 无法实例化

由于抽象类可以实现方法,所以在抽象类中定义方法时可以使用非抽象超类的方法。此外,从抽象类继承的人从非抽象超类中获取方法,如下所示:

车辆继承抽象汽车继承法拉利

然后法拉利将获得车辆的实际实施方法。

于 2013-06-22T08:48:28.243 回答
0

是的,你可以,只要你不扩展这个类,你就不必实现任何方法。

Abstract class AbstractClass extends ConcreteClass{
    public abstract void method();
}

class ConcreteClass {
    public void doSomething(){

    }
}

在 AbstractClass 中,您不必实现 doSomething 方法,而在 ConcreteClass 中,您不必实现 method()。如果您自己尝试会更好,我建议您阅读这本书 http://www.amazon.com/SCJP-Certified-Programmer-Java-310-065/dp/0071591060

谢谢,哈利勒。

于 2013-06-22T08:50:22.000 回答
0

你可以这样做,前提是你扩展的具体类不是最终的。和所有抽象类一样,它们不能被实例化。

例如,如果您希望您的继承者重新实现某些方法,则可以使用此示例……说:

public abstract class MustHaveEqualsAndHashCode()
{
    @Override
    public abstract int hashCode();

    @Override
    public abstract boolean equals(Object obj);
}

但是请注意,这种情况非常罕见。大多数时候,它可以有利地用合成代替。

于 2013-06-22T08:52:57.413 回答