我理解抽象类可能包含抽象和具体的方法(即使用body实现)。我的问题是:子类可以从抽象超类继承/覆盖具体方法。其次,他们必须以与实现抽象方法相同的方式实现具体方法吗?
答案 0 :(得分:11)
子类可以从抽象继承/覆盖具体方法 超
如果它们不是final
,是的,可以覆盖它们。
其次,他们必须以同样的方式实施具体方法 他们实现抽象方法?
不,他们只需要实现/覆盖抽象的方法,否则抽象方法就没有意义了。
答案 1 :(得分:5)
具体方法意味着,该方法具有完整的定义,但可以在继承的类中重写。如果我们制定这种方法" final"然后它不能被覆盖。宣布一个方法或类" final"意味着它的实施完成。必须覆盖子类中的抽象方法,否则子类也将是一个抽象类,并且必须声明为abstract。
答案 2 :(得分:4)
子类可以从抽象超类继承/覆盖具体方法吗?
如果子类与父类不同,则子类将继承所有标记为public
或protected
的方法。如果子类在同一个包中,则继承除private
方法之外的所有方法。
子类必须覆盖/实现抽象方法,并且如果它们未标记为final
,则可以覆盖/实现具体方法。
他们是否必须以继承抽象方法的方式继承具体方法?
没有。他们不必实施具体方法。但是,他们可以覆盖具体方法,除非它们没有标记final
。
答案 3 :(得分:0)
Java中的具体方法只不过是其他任何普通方法一样。不是抽象方法的方法在Java中被称为具体方法。如果要执行这些具体方法,请创建该类的实例(对象)并调用该特定方法。
如果在类中声明抽象方法,则也必须声明类抽象。您不能在具体的类中使用抽象方法。 在Java中,无法实例化抽象类。抽象类可能包含抽象和具体方法(即具有主体实现)。
是,如果子类不是私有的,最终的或静态的,则可以从抽象超类继承/重写具体的方法。
否,他们不必实施具体方法。但是,除非未将它们标记为final,否则它们可以覆盖具体方法。
答案 4 :(得分:0)
子类可以从抽象超类继承具体方法吗?
它们>> do <<继承它们,除非它们覆盖它们。 (除了private
方法外,这些方法在Java中从不继承或覆盖。)
子类可以覆盖抽象超类中的具体方法吗?
是的,他们可以覆盖它们。 (除了private
方法之外,这些方法在Java中从不继承或覆盖。)它们不必这样做。
第二,他们必须像实现抽象方法一样实现具体方法吗?
如果您要问子类是否必须“实现”抽象超类中定义的具体方法:
不,他们没有,但是他们可以,如果这样做,这称为覆盖。
如果您要问问覆盖一个具体方法是否与实现一个抽象方法相同:
不,不完全相同。在抽象方法的实现中,通常不能使用super
来委托在超类链中进一步定义的重写方法。
如果您要问具体方法的覆盖与抽象方法的实现是否相同:
是的。语法是一样的。 (在后一种情况下,您无法使用super
进行委派;请参见上文。)
注意:当子类也是抽象的时,以上所有内容几乎都是正确的;即抽象超类的抽象子类。