0

我是一个完整的Java新手。我不明白为什么 Java 不允许我使用关键字 super(arg)。OBS:Design05C 是 Design05 的子类。

public class Design05C extends Design05 {
    private double x;
    private double y;

    public Design05C(char typeCoord, double xCartesian, double yCartesian) {
        super(typeCoord);
        this.x = xCartesian;
        this.y = yCartesian;
    }   

    //Instance methods **************************************************    
    public double getX()  
    {
        if(typeCoord == 'C') 
            return x;
        else 
            return (Math.cos(Math.toRadians(y)) * x);
    }   

    public double getY()
    {
        if(typeCoord == 'C') 
            return y;
        else 
            return (Math.sin(Math.toRadians(y)) * x);
    }    
}

这是超类 Design05:

public class Design05
{
    public char typeCoord;
    public Design05C designC;
    public Design05P designP;

    public Design05(char type, Design05C dCartesian, Design05P dPolar)
    {
        if(type != 'C' && type != 'P')
            throw new IllegalArgumentException();
        typeCoord = type;
        designC = dCartesian;
        designP = dPolar;
    }
}

谢谢!!!

4

3 回答 3

0

可能的原因是,

superDesign05类没有以 char 作为参数的构造函数。

编辑

由于构造函数

 public Design05(char type, Design05C dCartesian, Design05P dPolar)
    {
        if(type != 'C' && type != 'P')
            throw new IllegalArgumentException();
        typeCoord = type;
        designC = dCartesian;
        designP = dPolar;
    }

取三个参数,但你在这里只传递一个参数

super(typeCoord);

所以向你的超类添加另一个构造函数,这样它也可以 char单独使用。

public class Design05
{
    public char typeCoord;
    public Design05C designC;
    public Design05P designP;

    public Design05(char type, Design05C dCartesian, Design05P dPolar)
    {
        if(type != 'C' && type != 'P')
            throw new IllegalArgumentException();
        typeCoord = type;
        designC = dCartesian;
        designP = dPolar;
    }

   public Desgin05(char type){

   typeCoord = type;

  }
}
于 2013-09-22T07:29:06.473 回答
0

测试 Design05 是否创建了这个构造函数

public Desgin05(char value){

this.value = value;

}

如果没有构造函数,则需要创建。

于 2013-09-22T07:30:31.857 回答
0

Design05 类中没有采用单个 char 参数的构造函数。您将不得不从此更改对超级构造函数的调用

  super(typeCoord);

对此

  super(typeCoord, xCartesian, yCartesian);

然后你的代码就可以工作了。尝试。

编辑:

你的设计本身是不正确的。您不能在超类的构造函数中添加子类对象。这行不通。从构造函数中删除子类对象。

如果要在超类对象中添加子类对象,则保留它们的引用并在构造对象后对其进行初始化。而不是在构造函数中。

于 2013-09-22T08:05:33.263 回答