实例化一个类不起作用,构造函数参数未通过

时间:2018-02-16 21:05:04

标签: java inheritance parameters constructor polymorphism

我尝试从我的测试类初始化一个圆形对象,但是参数(5.5)没有通过。结果是错误的。我尝试调试并找出圆圈类中的半径为0.00,5.5没有传递给Circle类。 任何人都可以帮助我吗?

这是我的输出:

The area of circle is:  3.14

这是我的测试类:

public class ShapeTest {
        public static void main(String[] args){
            Circle circle = new Circle(5.5);
            System.out.println(circle);
            }


        }
    }

这是我的圈子类:

public class Circle extends TwoDimensionalshape {
        private double radius;

        public Circle(double radius){
            super(radius);
        }

    public void setRadius(double radius){
        this.radius = radius;
    }
    public double getRadius(){
        return radius;
    }

    @Override
    public double getArea(){
        return 3.14+getRadius()+getRadius();
    }

    @Override
    public String toString(){
        return String.format("%s %,.2f%n ","The area of circle is: ",getArea());
    }



}

这是我的超级班:

public class TwoDimensionalshape implements Area{
        private double radius;
        private double base;
        private double height;

        public TwoDimensionalshape(double radius){
            this.radius = radius;
    }

    public TwoDimensionalshape(double base, double height){
        this.base = base;
        this.height = height;
    }

    public double getRadius() {
        return radius;
    }


    public double getBase() {
        return base;
    }

    public double getHeight() {
        return height;
    }

    @Override
    public double getArea(){
        return 1;
    }

    public String toString(){
        return "The area is: "+getArea();
    }


}

3 个答案:

答案 0 :(得分:3)

radius 中的Circle变量隐藏 radius中的TwoDimensionalshape变量。它们是两个不同的变量。您的构造函数在TwoDimensionalShape中设置了一个,但getArea正在使用Circle中的那个。

删除radius中的Circle变量。通过从Circle中删除该方法,让getRadius继承Circle。同样在Circle中,将setRadius移至TwoDimensionalShape

此外,在getArea中,将半径乘以两次而不是将其相加两次。您也可以使用Math.PI代替3.14

return Math.PI * getRadius() * getRadius();

答案 1 :(得分:1)

您在Circle构造函数中缺少以下行:

public Circle(double radius){
    super(radius);
    this.radius = radius; // add this line
} 

radius中的privateTwoDimensionalshape,您无法从子类(在这种情况下来自Circle)访问它。您需要在radius的构造函数中设置CircleCircle的值,就像在代码中一样,它使用getArea() radius值计算0 1}}。

另一个问题 - 要正确计算面积,你应该改变:

return 3.14 + getRadius() + getRadius();

为:

return 3.14 * getRadius() * getRadius();

答案 2 :(得分:1)

从Circle类中删除public static function transaction_color_class($string) { switch ($string) { case 'buy': case 'withdraw': return 'text-danger'; break; case 'charge': case 'profit': case 'return': return 'text-success'; break; default: return 'text-muted'; break; } ,它应该可以正常工作。同时将Circle类中的getRadius()方法体更改为:  foreach(Transaction::getTransactions(5) as $trans) { echo $trans->getColor(); }