我是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;
}
}
谢谢!!!
答案 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);
然后你的代码就可以了。尝试。
编辑:
您的设计本身不正确。您不能在超类的构造函数中添加子类对象。这不行。从构造函数中删除子类对象。
如果要在超类对象中添加子类对象,则保留它们的引用并在构造对象后初始化它们。而不是在构造函数中。