Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Oop 是否必须在所有子类中实现抽象方法?_Oop - Fatal编程技术网

Oop 是否必须在所有子类中实现抽象方法?

Oop 是否必须在所有子类中实现抽象方法?,oop,Oop,我有一些实现特定方法的子类,在它们的超类中声明为抽象。另外,如果我还有一个子类不应该实现那个特定的方法呢 这和我对fields的问题是一样的。子类忽略其超类的某些字段是常见的吗 这不是关于任何特定的技术,只是关于良好的编程实践。在各种技术中,“强制”的语义可能有讨论的余地,但一般来说,是的,它是强制的。OO的基本规则之一是,无论超类在哪里有效,子类至少作为一个类型也必须有效。如果您以某种方式删除了一个方法或字段(或未能提供它),那么您就违反了该规则,因为在super中使用该方法/字段的任何上下文

我有一些实现特定方法的子类,在它们的超类中声明为抽象。另外,如果我还有一个子类不应该实现那个特定的方法呢

这和我对fields的问题是一样的。子类忽略其超类的某些字段是常见的吗


这不是关于任何特定的技术,只是关于良好的编程实践。

在各种技术中,“强制”的语义可能有讨论的余地,但一般来说,是的,它是强制的。OO的基本规则之一是,无论超类在哪里有效,子类至少作为一个类型也必须有效。如果您以某种方式删除了一个方法或字段(或未能提供它),那么您就违反了该规则,因为在super中使用该方法/字段的任何上下文都不再有效。可以说,如果不填写这些抽象项,就没有子类。

除非子类是抽象类,否则必须在子类内实现所有抽象方法。就是这样。

这完全取决于用例。有一个叫做“拒绝遗产”的设计反模式描述了这种情况;谷歌。基本上,如果你看到这一点,那么它表明你的设计有问题。谢谢,欧内斯特!这完全让我明白了我想要理解的东西。如果派生类也是抽象的,那么就不需要实现它们。但所有非抽象派生类都必须实现它们。