当前位置: 代码迷 >> java >> 在Java中实现定义三种形状的类
  详细解决方案

在Java中实现定义三种形状的类

热度:16   发布时间:2023-08-02 10:28:36.0

我想我已经按照以下说明实施了所有要求的操作:

设计并实现一组三个定义形状的类: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?

谢谢你的帮助!

SphereCone中都实现toString()方法。 在那些toString方法中,放置特定于那些类的细节,并为超类的字段调用super.toString()

对于Cone来说,它将像:

public String toString() {
     return height + super.toString();
}

使用super允许您访问父类和接口。 另外,请随意使用casting

var self = (BaseOfBase)super;
self.VirtualMethod();

翻起律位与csharps' base是完全一样。

我不太确定您的问题是什么,但是我想您要问的是:“当在main方法中它们只是RoundObject时,如何在Sphere对象和Cone对象上调用toString方法?”

您应该在每个类中重写toString方法,并且它应该返回与该类有关的信息。 因此, RoundObject不需要返回体积,而只需要返回半径(也许像return "RoundShape with radius " + radius;东西)。 然后,您将对球体和圆锥体执行相同的操作,但其中还将包括形状体积。

然后在main ,您可以简单地在RoundObjects上调用toString方法。 因为toString方法是一个实例方法(其标题中没有static关键字),所以它是 。 意思是,将使用来自实际基础对象的方法。

我看到您正在尝试将sphere / cone字段(sphere1,cone1)拉入RoundObject但这不是必需的。 (最好是让父母对子类一无所知)

有关更多信息,请查找或 。

  相关解决方案