抽象类中的具体方法

时间:2013-05-21 17:06:55

标签: java inheritance abstract-class concrete-inheritance

我理解抽象类可能包含抽象和具体的方法(即使用body实现)。我的问题是:子类可以从抽象超类继承/覆盖具体方法。其次,他们必须以与实现抽象方法相同的方式实现具体方法吗?

5 个答案:

答案 0 :(得分:11)

  

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

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

  

其次,他们必须以同样的方式实施具体方法   他们实现抽象方法?

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

答案 1 :(得分:5)

具体方法意味着,该方法具有完整的定义,但可以在继承的类中重写。如果我们制定这种方法" final"然后它不能被覆盖。宣布一个方法或类" final"意味着它的实施完成。必须覆盖子类中的抽象方法,否则子类也将是一个抽象类,并且必须声明为abstract。

答案 2 :(得分:4)

  

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

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

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

  

他们是否必须以继承抽象方法的方式继承具体方法?

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

答案 3 :(得分:0)

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

如果在类中声明抽象方法,则也必须声明类抽象。您不能在具体的类中使用抽象方法。 在Java中,无法实例化抽象类。抽象类可能包含抽象和具体方法(即具有主体实现)。

,如果子类不是私有的,最终的或静态的,则可以从抽象超类继承/重写具体的方法。

,他们不必实施具体方法。但是,除非未将它们标记为final,否则它们可以覆盖具体方法。

答案 4 :(得分:0)

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

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

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

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

第二,他们必须像实现抽象方法一样实现具体方法吗?

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

不,他们没有,但是他们可以,如果这样做,这称为覆盖

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

不,不完全相同。在抽象方法的实现中,通常不能使用super来委托在超类链中进一步定义的重写方法。

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

是的。语法是一样的。 (在后一种情况下,您无法使用super进行委派;请参见上文。)


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