构造函数<class>未定义。不能在java </super(arg)> </class>中使用<super(arg)>

时间:2013-09-22 07:26:29

标签: java constructor undefined super

我是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;
    }
}

谢谢!!!

3 个答案:

答案 0 :(得分:0)

可能性原因是,

super class Design05类没有以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;

  }
}

答案 1 :(得分:0)

测试Design05是否已创建此构造函数

public Desgin05(char value){

this.value = value;

}

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

答案 2 :(得分:0)

Design05类中没有构造函数,它接受一个char参数。您必须从此

更改对超级构造函数的调用
  super(typeCoord);

到这个

  super(typeCoord, xCartesian, yCartesian);

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

编辑:

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

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