6

我真的有两个问题。我正在尝试了解继承的工作原理。

如果我有一个要继承的抽象类,并且它有一个没有标记为抽象的方法,这个方法是否还需要在子类中实现?

如果我有一个从另一个子类继承的子类,然后又从一个抽象类继承,那么最低的子类是否需要实现抽象类中的方法?还是因为方法已经在中间子类中实现了,就不需要再实现了?

谢谢!

4

2 回答 2

13

抽象类是声明为抽象的类。它可能包括也可能不包括抽象方法。抽象类不能被实例化,但它们可以被子类化。

抽象方法是在没有实现的情况下声明的方法(没有大括号,后跟分号),如下所示:

abstract void moveTo(double deltaX, double deltaY);

如果一个类包含抽象方法,则该类本身必须声明为抽象的,如下所示:

public abstract class GraphicObject {
    // declare fields
    // declare non-abstract methods
    abstract void draw();
}

当抽象类被子类化时,子类通常为其父类中的所有抽象方法提供实现。但是,如果不是,则子类也必须声明为抽象的

于 2013-06-07T01:48:27.283 回答
2
  1. 如果方法不是抽象的,它已经实现了,当你继承抽象类的子类时,你继承了方法实现,重新实现它会覆盖它。如果方法被声明为抽象,则如果子类也未声明为抽象,则必须实现或获得编译时错误。
  2. 如果您从非抽象类继承,A extends AbstractClass则 A 必须实现了任何抽象方法或再次编译错误。如果它没有实现任何抽象类,那么 A 也必须是抽象的,并且实现抽象方法的责任落在 A 的子类上。任何不实现该方法的子类也必须声明为抽象,直到最终子类实现它。
于 2013-06-07T01:53:50.020 回答