Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/392.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在我的java程序中有2个编译错误。请澄清_Java_Constructor - Fatal编程技术网

在我的java程序中有2个编译错误。请澄清

在我的java程序中有2个编译错误。请澄清,java,constructor,Java,Constructor,我得到的错误是 1找不到符号错误 及 2“构造函数循环,类内循环不能应用于给定类型。” 在这一点上,我似乎可以理解我做错了什么 public class Circle { private double radius; public Circle (double radius) { radius = radius; } public double getRadius() { return radius;

我得到的错误是 1找不到符号错误

2“构造函数循环,类内循环不能应用于给定类型。”

在这一点上,我似乎可以理解我做错了什么

 public class Circle {
     private double radius;

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

     public double getRadius() {
         return radius;
     }

     public double getArea() {
         return radius * radius * Math.PI;
     }
}

class B extends Circle {
    private double length;

    B (double radius, double length) {
        Circle (radius);
        length = length;
    }

    //**override getArea()*/
    public double getArea() { 
        return getArea() * length;
    }
}

在超级类
圈中
使用
引用当前实例

 public Circle (double radius) {
     this.radius = radius;// Use this
 } 
在子类中,使用
super()
访问超类构造函数。从

B (double radius, double length) {
Circle (radius);// This is compilation error.
length = length;
}


我建议您更改:

radius = radius;

并将
B
构造函数更改为:

public Test(double radius, double length)
{
    super(radius); // Calls super class constructor
    this.length = length;
}

并在构造函数中使用
this.length=length
。否则,
length
将被解释为参数,而不是实例变量,并且永远不会设置实例变量。实际上,在构造函数参数列表中使用
final double length
。您可能还希望限制半径为正。啊,我明白了,谢谢。(我遇到另一个错误,告诉我需要将main类定义为publicstaticvoidmain(string[]args)),该类应该是
publicstaticvoidmain(string[]args)
才能运行代码。由于没有方法设置半径和长度,所以将实例变量声明为
final
。它明确了目的。
this.radius = radius; // 'this' makes reference to the actual instance
public Test(double radius, double length)
{
    super(radius); // Calls super class constructor
    this.length = length;
}