繁体   English   中英

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

[英]The constructor <Class> is undefined. Can't use <super(arg)> in java

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

谢谢!!!

可能的原因是,

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;

  }
}

测试Design05是否已创建此构造器

public Desgin05(char value){

this.value = value;

}

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

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

  super(typeCoord);

对此

  super(typeCoord, xCartesian, yCartesian);

然后您的代码将起作用。 尝试。

编辑:

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM