繁体   English   中英

抽象类中的具体方法

[英]Concrete method in abstract class

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

是的,他们可以覆盖它们。 (除了private方法,它们在 Java 中永远不会被继承或覆盖。)但他们不必这样做。

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

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

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

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

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

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

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


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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM