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

时间:2015-07-18 21:31:04

标签: java class methods tostring

我想我已经实施了这些指令中提出的所有要求:

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

感谢您的帮助!

3 个答案:

答案 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,但这不是必需的。 (实际上,父母对子类没有任何了解更好)

有关详情,请查看polymorphismthis video