Abstract Subclass如何在Java中工作?

时间:2013-06-22 08:38:47

标签: java abstract-class

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

谢谢

4 个答案:

答案 0 :(得分:3)

这已经到处发生,因为所有类都直接或间接地从Object继承。因此,例如AbstractCollection是一个抽象类,它继承自具体类Object

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

答案 1 :(得分:2)

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

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

  2. 无法实例化

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

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

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

答案 2 :(得分:0)

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

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

class ConcreteClass {
    public void doSomething(){

    }
}

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

谢谢, 方。

答案 3 :(得分:0)

如果您扩展的具体类不是最终的,那么您可以这样做。和所有抽象类一样,它们无法实例化。

这样做的一个示例是,如果您希望您的继承者重新实现某些方法......说:

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

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

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