gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-29 04:09:30 26 4
gpt4 key购买 nike

我在理解 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 类作为父类和 Circle 类作为子类,同时 Shape 类是一个抽象类,现在我想在 Circle 类中定义 area 方法 但不是 volume 方法,我想在 Sphere 类中定义 volume 方法。但是当我这样做时,它会显示错误,但如果我在 Circle 类中定义这两个方法,那么它就可以正常工作。但是 Circle 类有额外的体积代码,这不是 Circle 类的使用。

最佳答案

抽象成员不是可选成员。它是一个必须为实现具体类而实现的成员。如果其中一个抽象成员未在派生类中定义,this class is also abstract并且不能被实例化。

这是 Interface Segregation Principle 的一个很好的例子:您的 Shape 接口(interface)结合了不同的可能不相关概念的接口(interface):area() 仅与 2D 形状相关,以及 volume()仅与 3D 形状相关。

如果你想要一个干净的SOLID设计时,您需要考虑使用 area()perimeter()Shape2D 以及使用一个 surface()volume()

如果您认为 area() 实际上与 surface() 相同,您可以考虑抽象父级 Shape 提供了一个抽象的 surface(),一个子 Shape2D 提供了 perimeter() 和另一个子 Shape3D 提供 volume()

更实用的是,您可以将 Circle 或任何其他 2D 形状的 volume() 简单地视为 0 并坚持您的原始设计。

关于java - 在一个具体类中定义所有抽象方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55894069/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com