子类可以从抽象超类继承/覆盖具体方法吗?
如果子类与父类在不同的包中,则子类将继承所有标记为public
或protected
的方法。如果子类在同一个包中,它将继承除私有
方法之外的所有方法。
子类必须重写/实现抽象方法,并且可以重写/实现具体方法,如果它们没有标记为最终
。
他们是否必须像继承抽象方法一样继承具体方法?
不。它们不必实现具体方法。但是,它们可以覆盖具体方法,除非它们没有标记为最终
。
具体方法意味着,该方法具有完整的定义,但可以在继承的类中重写。如果我们将此方法设为“最终”,则不能重写它。将方法或类声明为“最终”意味着它的实现是完整的。必须重写子类中的抽象方法,否则子类也将是抽象类,必须声明为抽象类。
子类可以继承/覆盖抽象超类的具体方法吗
如果它们不是< code >最终的,可以被覆盖。
其次,他们必须像实现抽象方法一样实现具体方法吗?
不,他们只需要实现/覆盖抽象的方法,否则抽象的方法就没有意义了。
问题内容: 当其中的所有方法都是具体的时,有人在声明类抽象时有一些实际的编程情况吗? 问题答案: 好吧,您可能正在使用模板方法模式,其中存在多个都具有默认实现的覆盖点,但是组合的默认实现本身不合法-任何功能实现都必须是子类。 (是的,我不喜欢模板方法模式;)
问题内容: 我之前了解到抽象类可以扩展具体类。尽管我没从JAVA设计师那里看到原因,但是没关系。我还了解到,扩展具体类的抽象类可以使重写的方法抽象。为什么?您可以提供有用的用例吗?我正在尝试学习设计模式,我不想错过任何东西。 这是示例: 问题答案: 如果我有一组想要默认实现的类(以便它们可以从扩展),并且想要强制提供自己的实现(在这种情况下使其抽象为子类会强制执行此操作。) 当然,此示例中的另一种
当我们把类看作一种数据类型时,我们通常认定该类型的对象是要被实例化的。但是,在许多情况下,定义不实例化为任何对象的类是很有用处的,这种类称为 抽象类 (abstract class)。因为抽象类要作为基类被其他类继承,所以通常也把它称为 抽象基类(abstract base class)。抽象基类不能用来建立实例化的对象。 抽象类的惟一用途是为其他类提供合适的基类,其他类可从它这里继承和(或)实现
我在想有没有更好的办法。我想要的是在抽象类中有一个具体的方法,返回扩展抽象类的具体实例。 我认为我不应该把它转换成T,因为它总是T的一个实例。
在JLS 8第8.4.8.1节中,有一条声明: 在某些参数化下,泛型超类C中的具体方法可以与该类中的抽象方法具有相同的签名。在这种情况下,具体方法是继承的,而抽象方法不是。然后应将继承的方法视为覆盖其来自C的抽象对等体。 有人能为泛型类提供这种参数化的例子吗?我不能。
我想在我即将完成的一些工作中使用builder模式,它在一个层次结构中有几个类。基类将至少有9个字段要启动,各个子类可能会添加2-4个字段。这会很快失控,而builder模式正是出于这个原因吸引了我。我在书籍和文章中初步接触了builder模式。他们是有帮助的,但没有关于如何扩展这种模式。我试图自己实现这一点,但是我在每个子类的构造函数中遇到了麻烦,因为我不知道如何将构建器中收集的数据传递给超级类