我了解抽象类可能包含抽象和具体方法(即带有主体实现)。我的问题是:子类可以继承/覆盖抽象超类的具体方法。其次,他们是否必须以与实现抽象方法相同的方式来实现具体方法?
5 回答
子类可以继承/覆盖抽象超类的具体方法吗
如果它们不是final
,是的,它们可以被覆盖。
其次,他们是否必须以与实现抽象方法相同的方式来实现具体方法?
不,他们只需要实现/覆盖抽象的,否则抽象方法没有意义。
具体方法是指该方法具有完整的定义,但可以在继承的类中被覆盖。如果我们将此方法设为“最终”,则它不能被覆盖。声明一个方法或类“final”意味着它的实现已经完成。必须重写子类中的抽象方法,否则子类也将是抽象类并且必须声明为抽象。
子类可以继承/覆盖抽象超类的具体方法吗?
如果子类与父类在不同的包中,子类将继承所有标记的方法public
。protected
如果子类在同一个包中,则继承除methods之外的所有private
方法。
子类必须覆盖/实现抽象方法,并且可以覆盖/实现具体方法(如果它们未标记为final
.
他们是否必须像继承抽象方法一样继承具体方法?
不,他们不必实现具体的方法。但是,它们可以覆盖具体方法,除非它们没有被标记final
。
Java 中的具体方法与任何其他普通方法一样。不是抽象方法的方法在java中被称为具体方法。如果我们要执行这些具体方法,请创建类的实例(对象)并调用该特定方法。
如果你在一个类中声明一个抽象方法,那么你也必须声明类抽象。在具体类中不能有抽象方法。在 Java 中,无法实例化抽象类。抽象类可能包含抽象和具体方法(即带有主体实现)。
是的,子类继承/覆盖抽象超类的具体方法,如果它们不是私有的、最终的或静态的,它们可以被覆盖。
不,他们不必实现具体的方法。但是,它们可以覆盖具体方法,除非它们没有标记为 final。
子类可以从抽象超类继承具体方法吗?
他们 >>do<< 继承它们,除非它们覆盖它们。(除了private
在 Java 中从不继承或覆盖的方法。)
子类能否覆盖抽象超类的具体方法。
是的,他们可以覆盖它们。(除了private
在 Java 中从不继承或覆盖的方法。)尽管如此,它们不必这样做。
其次,他们是否必须以与实现抽象方法相同的方式来实现具体方法?
如果您询问子类是否必须“实现”抽象超类中定义的具体方法:
不,他们不必这样做,但他们可以,如果他们这样做,就称为压倒一切。
如果您询问重写具体方法是否与实现抽象方法相同:
不,不完全一样。在抽象方法的实现中,您通常不能使用super
在超类链中进一步定义的被覆盖方法委托。
如果您询问具体方法的覆盖是否与抽象方法的实现相同:
是的。语法是一样的。(你不能super
在后一种情况下委托使用;见上文。)
注意:当子类也是抽象的时,上述几乎所有内容都是正确的;即抽象超类的抽象子类。