我理解一个抽象类可能包含抽象和具体的方法(即与主体实现)。我的问题是:子类可以继承/覆盖抽象超类的具体方法。第二,他们是否必须像实现抽象方法一样实现具体方法?
子类可以继承/覆盖抽象的具体方法超类
如果它们不是final
,是,它们可以被覆盖。
其次,他们必须以同样的方式实现具体的方法吗它们实现抽象方法?
不,它们只需要实现/覆盖抽象方法,否则抽象方法就没有意义了。
具体方法意味着该方法具有完整的定义,但可以在继承的类中重写。如果我们把这个方法设为"final",那么它就不能被重写。将一个方法或类声明为"final"意味着它的实现已经完成。必须在子类中重写抽象方法,否则子类也将是一个抽象类,必须声明为抽象类。
子类可以继承/覆盖抽象超类的具体方法吗?
子类将继承所有标记为public
或protected
的方法,如果子类与父类在不同的包中。如果子类在同一个包中,它继承除private
方法外的所有方法。
子类必须覆盖/实现抽象方法,并且可以覆盖/实现没有标记为final
的具体方法。
它们必须像继承抽象方法一样继承具体方法吗?
。它们不需要实现的具体方法。但是,它们可以覆盖具体方法,除非它们没有标记为final
。
Java中的具体方法和其他普通方法没什么区别。在java中,不是抽象方法的方法被称为具体方法。如果我们想要执行这些具体的方法,创建一个类的实例(对象)并调用该特定的方法。
如果你在类中声明一个抽象方法,那么你也必须声明这个类的抽象。在具体类中不能有抽象方法。在Java中,不可能实例化抽象类。抽象类可以包含抽象方法和具体方法(即带有主体实现)。
是,子类继承/覆盖抽象超类的具体方法,如果它们不是私有的、final的或静态的,它们可以被覆盖。
不,它们不需要实现具体的方法。但是,它们可以覆盖具体方法,除非它们没有标记为final。
他们子类可以从抽象超类继承具体方法吗?
>> do<& lt;继承它们,除非它们覆盖它们。(除了private
方法,它们在Java中永远不会被继承或覆盖。)
子类可以覆盖抽象超类的具体方法吗?
是的,他们可以覆盖它们。(除了private
方法,它们在Java中永远不会被继承或覆盖。)但他们不必这样做。
其次,他们必须像实现抽象方法一样实现具体方法吗?
如果你问子类是否必须"实现"在抽象超类中定义的具体方法:
不,它们没有必须这样做,但是它们可以,如果它们这样做了,就叫做重写。
如果你问重写一个具体方法是否等同于实现一个抽象方法:
不,不完全一样。在抽象方法的实现中,通常不能使用super
来委托在超类链上进一步定义的被覆盖的方法。
如果你问一个具体方法的重写是否看起来和一个抽象方法的实现一样:
是的。语法是一样的。(在后一种情况下,您不能使用super
进行委托;见上图)
注意:当子类也是抽象的时候,上面所有的都是正确的;也就是抽象超类的抽象子类。