[英]Defining all abstract method in one concrete class
我在理解OOP的主要话题时遇到了重大问题。 虽然我经历过迪特尔的书。 我有一个抽象的类形状。
public abstract class Shape
{
public abstract area();
public absract volume;
}
public class Circle extends Shape
{
//definition of area method
}
public class Sphere extends Shape
{
//define volume method
// define area method
}
现在我将Shape类作为Parent类而Circle类作为子类,同时Shape类是一个抽象类,现在我想在Circle类中定义area方法而不是volume方法,我想在Sphere类中定义volume方法。 但是,当我这样做,它显示我错误,但如果我在Circle类中定义两个方法,那么它工作正常。 但是Circle类有额外的音量代码,不使用Circle类。
抽象成员不是可选成员。 它是必须实现的实现具体类的成员。 如果未在派生类中定义其中一个抽象成员,则此类也是抽象的 ,无法实例化。
这是界面分离原则的一个很好的例子: Shape
的界面结合了不同的潜在无关概念的界面: area()
仅与2D形状相关,而volume()
仅与3D形状相关。
如果你想要一个干净的SOLID设计,你需要考虑带有area()
和perimeter()
的Shape2D
以及带有surface()
和volume()
的Shape3D
。
如果你认为area()
实际上与surface()
,你可以考虑一个抽象的父Shape
,它提供一个抽象的surface()
,一个子Shape2D
提供了perimeter()
,另一个子Shape3D
了提供volume()
。
更务实的是,您可以认为Circle
或任何其他2D形状的volume()
只是0并坚持原始设计。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.