12

我了解抽象类可能包含抽象和具体方法(即带有主体实现)。我的问题是:子类可以继承/覆盖抽象超类的具体方法。其次,他们是否必须以与实现抽象方法相同的方式来实现具体方法?

4

5 回答 5

14

子类可以继承/覆盖抽象超类的具体方法吗

如果它们不是final,是的,它们可以被覆盖。

其次,他们是否必须以与实现抽象方法相同的方式来实现具体方法?

不,他们只需要实现/覆盖抽象的,否则抽象方法没有意义。

于 2013-05-21T17:09:46.807 回答
6

具体方法是指该方法具有完整的定义,但可以在继承的类中被覆盖。如果我们将此方法设为“最终”,则它不能被覆盖。声明一个方法或类“final”意味着它的实现已经完成。必须重写子类中的抽象方法,否则子类也将是抽象类并且必须声明为抽象。

于 2015-02-10T05:56:41.167 回答
5

子类可以继承/覆盖抽象超类的具体方法吗?

如果子类与父类在不同的包中,子类将继承所有标记的方法publicprotected如果子类在同一个包中,则继承除methods之外的所有private方法。

子类必须覆盖/实现抽象方法,并且可以覆盖/实现具体方法(如果它们未标记为final.

他们是否必须像继承抽象方法一样继承具体方法?

不,他们不必实现具体的方法。但是,它们可以覆盖具体方法,除非它们没有被标记final

于 2013-05-21T18:30:02.570 回答
1

Java 中的具体方法与任何其他普通方法一样。不是抽象方法的方法在java中被称为具体方法。如果我们要执行这些具体方法,请创建类的实例(对象)并调用该特定方法。

如果你在一个类中声明一个抽象方法,那么你也必须声明类抽象。在具体类中不能有抽象方法。在 Java 中,无法实例化抽象类。抽象类可能包含抽象和具体方法(即带有主体实现)。

的,子类继承/覆盖抽象超类的具体方法,如果它们不是私有的、最终的或静态的,它们可以被覆盖。

,他们不必实现具体的方法。但是,它们可以覆盖具体方法,除非它们没有标记为 final。

于 2019-03-22T05:34:23.260 回答
0

子类可以从抽象超类继承具体方法吗?

他们 >>do<< 继承它们,除非它们覆盖它们。(除了private在 Java 中从不继承或覆盖的方法。)

子类能否覆盖抽象超类的具体方法。

是的,他们可以覆盖它们。(除了private在 Java 中从不继承或覆盖的方法。)尽管如此,它们不必这样做。

其次,他们是否必须以与实现抽象方法相同的方式来实现具体方法?

如果您询问子类是否必须“实现”抽象超类中定义的具体方法:

不,他们不必这样做但他们可以,如果他们这样做,就称为压倒一切

如果您询问重写具体方法是否与实现抽象方法相同:

不,不完全一样。在抽象方法的实现中,您通常不能使用super在超类链中进一步定义的被覆盖方法委托。

如果您询问具体方法的覆盖是否与抽象方法的实现相同:

是的。语法是一样的。(你不能super在后一种情况下委托使用;见上文。)


注意:当子类也是抽象的时,上述几乎所有内容都是正确的;即抽象超类的抽象子类。

于 2020-01-29T02:33:26.967 回答