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
Java 在一个具体类中定义所有抽象方法_Java_Oop_Inheritance_Polymorphism - Fatal编程技术网

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

Java 在一个具体类中定义所有抽象方法,java,oop,inheritance,polymorphism,Java,Oop,Inheritance,Polymorphism,我在理解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 /

我在理解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类中定义面积方法,而不是体积方法,我想在Sphere类中定义体积方法。但当我这样做的时候,它显示了一个错误,但若我在Circle类中定义了这两个方法,那个么它就可以正常工作了。但是Circle类有额外的卷代码,这不是Circle类的用法。

抽象成员不是可选成员。它是实现具体类必须实现的成员。如果一个抽象成员未在派生类中定义,并且无法实例化

这是一个很好的例子:
Shape
的界面结合了不同可能不相关概念的界面:
area()
,它只与2D形状相关,而
volume()
只与3D形状相关

如果您想要一个干净的设计,您需要考虑<代码> Sabe2D2/代码>使用<代码>区域()/<代码>和<代码> PimimTeYe()/<代码>和<代码> Seave3D > <代码>表面()/<代码>和<代码>卷()/<代码>。p>

如果您认为<代码>区域()/代码>实际上是与<代码> Survie()/Cuth>相同的东西,则可以考虑抽象的父代码“代码>形状<代码> >,提供一个抽象的代码> Survie()/代码>,一个子<代码> Suffe2D2/代码>,它提供了<代码>接口()和另一个子

Shape3D
提供
卷()


更实用的是,你可以认为<代码>卷/ <代码> >代码>圆圈>代码>或任何其他2D形状仅为0,并坚持原来的设计。p> 为

volume()
引入
3DShape
-删除
Shape#volume
并声明
3DShape#volume
,其中
3DShape扩展了Shape
那么还有两个抽象类吗?类2dShape采用抽象面积法,类3DShape采用体积抽象法?抽象的概念是什么?若我们在一个抽象类中有三个抽象方法,那个么我们必须在具体类中定义它们,即使我们需要一个或两个?球体和其他3d形状都有面积(),但若你们的要求并没有为3d形状指定面积,那个么是的,你们应该在不同的类中分开它。将来,如果包括3d形状在内的所有形状都需要面积,则可以将该属性向上移动到
Shape
。对于第二个问题:是的,抽象类要求所有抽象方法都由具体的子类型实现。谢谢你,所以在第四段你说的,
Shape
Shape2D
Shape3D
都应该是抽象的?@AHF是的,没错!