问题描述
我想我已经按照以下说明实施了所有要求的操作:
设计并实现一组三个定义形状的类:RoundShape,Sphere,Cone。 对于每个类,存储有关其大小的基本数据,并提供访问和修改此数据的方法。 此外,提供适当的方法来计算Sphere和Cone的面积和体积。 在您的设计中,请考虑形状之间的关系以及在何处可以实现继承。 不要创建重复的实例变量。 创建一个main方法,该方法实例化2个Sphere对象(任何参数),2个Cone对象(任何参数),使用ToString()显示它们,更改每个参数中的一个参数(您的选择),然后再次显示它们。
这是我的代码:
class RoundShape{
double shape = 9;
double radius = 4;
int cone1 = 3;
int sphere1;
public String toString(){
return " the man" + cone1 + "this also" + sphere1;
}
}
//--------------------------------------------------------------
// class Sphere that extends RoundShape
//--------------------------------------------------------------
class Sphere extends RoundShape{
double getArea(){
double area = 4 * Math.PI * Math.pow(radius, 2);
return area;
} // end of getArea
double getVolume(){
double volume = (4/3) * Math.PI * Math.pow(radius, 3);
return volume;
} // end of getVolume
} // end of the class Sphere
//---------------------------------------------------------------
// class Cone that extends RoundShape
//---------------------------------------------------------------
class Cone extends RoundShape{
double height = 8;
double getArea(){
double area = Math.PI * radius * (radius + Math.sqrt(Math.pow(height, 2) + Math.pow(radius, 2)));
return area;
} // end of getArea for Cone
double getVolume(){
double volume = Math.PI * Math.pow(radius, 2) * (height/3);
return volume;
} // end of getVolume for Cone
} // end of the class Cone
public class Murray_A03A4 {
public static void main(String[] args) {
Sphere sphere1 = new Sphere();
sphere1.getArea();
sphere1.getVolume();
System.out.println(sphere1);
Cone cone1 = new Cone();
cone1.getArea();
cone1.getVolume();
System.out.println(cone1);
} // End of class header
} // End of method header
我的主要问题是,如何从main方法中的内容thats回到toString方法? 另外,toString是在正确的类中找到的,还是应该将其放置在新的类中,还是应该为每个类创建一个toString?
谢谢你的帮助!
1楼
在Sphere
和Cone
中都实现toString()
方法。
在那些toString
方法中,放置特定于那些类的细节,并为超类的字段调用super.toString()
对于Cone来说,它将像:
public String toString() {
return height + super.toString();
}
2楼
使用super
允许您访问父类和接口。
另外,请随意使用casting :
var self = (BaseOfBase)super;
self.VirtualMethod();
翻起律位与csharps' base
是完全一样。
3楼
我不太确定您的问题是什么,但是我想您要问的是:“当在main
方法中它们只是RoundObject
时,如何在Sphere
对象和Cone
对象上调用toString
方法?”
您应该在每个类中重写toString方法,并且它应该返回与该类有关的信息。
因此, RoundObject
不需要返回体积,而只需要返回半径(也许像return "RoundShape with radius " + radius;
东西)。
然后,您将对球体和圆锥体执行相同的操作,但其中还将包括形状体积。
然后在main
,您可以简单地在RoundObjects
上调用toString
方法。
因为toString
方法是一个实例方法(其标题中没有static关键字),所以它是 。
意思是,将使用来自实际基础对象的方法。
我看到您正在尝试将sphere / cone字段(sphere1,cone1)拉入RoundObject
但这不是必需的。
(最好是让父母对子类一无所知)
有关更多信息,请查找或 。