繁体   English   中英

在一个具体类中定义所有抽象方法

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM