我想我已经实施了这些指令中提出的所有要求:
设计并实现一组定义形状的三个类: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方法中的内容返回toString方法?另外,在正确的类中找到toString还是应该将它放在一个新类中,还是应该为每个类创建一个toString?
感谢您的帮助!
答案 0 :(得分:1)
在toString()
&中实施Sphere
方法Cone
。在那些toString
方法中,将特定于这些类的详细信息和超类的字段调用super.toString()
对于Cone,它就像是:
public String toString() {
return height + super.toString();
}
答案 1 :(得分:0)
使用super
可以访问父类和接口。
此外,您可以随意使用 cast :
var self = (BaseOfBase)super;
self.VirtualMethod();
用csharps' base
完全相同。
答案 2 :(得分:0)
我不太确定您的问题是什么,但我认为您要求的是:"如何在toString
上调用Sphere
方法对象和Cone
对象在main
方法中只是RoundObject
?"
您应该覆盖每个类中的toString方法,并且它应该返回与该类相关的信息。所以RoundObject
不需要返回音量,只需要返回半径(可能是return "RoundShape with radius " + radius;
)。然后你会对球体和圆锥做同样的事情,但它也会包括形状体积。
然后在main
中,您只需在toString
上调用RoundObjects
方法即可。由于toString
方法是一种实例方法(标题中没有静态关键字),因此它是dynamically bound。意思是,将使用来自实际底层对象的方法。
我看到您正在尝试将球体/锥体字段(sphere1,cone1)拉入RoundObject
,但这不是必需的。 (实际上,父母对子类没有任何了解更好)
有关详情,请查看polymorphism或this video。