我们可以拥有一个具体的超类,然后是一个抽象的子类吗?有人可以解释一下这是如何工作的?
谢谢
答案 0 :(得分:3)
这已经到处发生,因为所有类都直接或间接地从Object
继承。因此,例如AbstractCollection
是一个抽象类,它继承自具体类Object
。
这没什么特别的。抽象类的具体子类仍然必须实现抽象方法。
答案 1 :(得分:2)
你可以拥有它。关于抽象类的唯一限制是:
继承时,必须实现抽象方法,或者继承的类也必须是抽象的。
无法实例化
由于抽象类可以实现方法,因此在抽象类中定义方法时可以使用非抽象超类的方法。此外,从抽象类继承的人从非抽象超类中获取方法,如下所示:
车辆继承抽象汽车继承法拉利
然后法拉利将获得实际实施的车辆方法。
答案 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);
}
但请注意,这种情况非常罕见。大多数情况下,它可以有利地用组成代替。