【发布时间】:2019-04-28 19:53:58
【问题描述】:
我在理解 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 类。
【问题讨论】:
-
为
volume()引入3DShape- 删除Shape#volume并声明3DShape#volume,其中3DShape extends Shape -
那么还有 2 个抽象类吗? 2dShape 类有抽象区域方法和 3dShapte 类有体积抽象方法?
-
抽象的定义概念是什么?如果我们在一个抽象类中有 3 个抽象方法,那么即使我们需要一两个,我们也必须在具体类中定义它们?
-
球体和其他 3d 形状具有面积 (surface area),但如果您的要求未指定 3d 形状的面积,那么是的,您可以将其分隔在不同的类之间。将来,如果包括 3d 形状在内的所有形状都需要面积,您可以将该属性移至
Shape。对于您的第二个问题:是的,抽象类要求所有抽象方法都由具体的子类型实现。 Read here for more on abstract classes.
标签: java oop inheritance polymorphism