我有这些类:一个名为“Shape”的抽象类,一个Point扩展Shape,一个Circle扩展Point
我无法改变这种关系。 我需要做的是在Circle中创建一个构造函数,它接收一个对象Point和一个double作为参数。我已经创建了一个名为point的对象Point 我已经尝试过了:
public Circle (Point objPunto, double valorRadio){
Pointp = new Point(objPunto.getX(), objPunto.getY());
setRadio(valorRadio);}
和
Circulo circulo2 = new Circulo(point, 3);
但它似乎没有用。它告诉我这个:
Implicit super constructor Punto() is undefined. Must explicitly invoke another constructor
。
我也尝试过使用Super的一些奇怪的东西,但这也没用。我开始认为它可以做到,如果是这样的话......任何人都知道为什么?
谢谢!
Point的代码
public class Point extends Shape {
private int x;
private int y;
public Point( int valorX, int valorY ){
x = valorX;
y = valorY;
}
public void setX( int valorX ){
x = valorX;
}
public int getX(){
return x;
}
public void setY( int valorY ){
y = valorY;
}
public int getY(){
return y;
}
public String getName(){
return "Punto";
}
public String describe(){
return "[" + obtenerX() + ", " + obtenerY() + "]";
}
}
答案 0 :(得分:2)
您的圈子正在尝试调用super();
作为第一步,但Point
没有默认的无参数构造函数。你必须调用super方法,它将参数作为Circle的构造函数的第一行。
尝试super(objPunto.getX(), objPunto.getY());
作为Circle构造函数中的第一个调用
答案 1 :(得分:1)
我认为您可以在前两个参数中调用super()
,如下所示:
public Circle (Point objPunto, double valorRadio){
super(objPunto.getX(), objPunto.getY());
setRadio(valorRadio);
}
super()
调用parent class
的构造函数,它应该是子构造函数中的第一个语句(如果使用的话)。
答案 2 :(得分:0)
如果您的班级Circle
延伸Point
,那么它可以访问其成员。
无需创建new Point()
:
public Circle (Point objPunto, double valorRadio){
setX(objPunto.getX());
setY(objPunto.getY());
setRadio(valorRadio);
}
答案 3 :(得分:0)
根据你刚给出的信息,你应该做这样的事情
public Circle (Point objPunto, double valorRadio) {
super.(objPunto.getX(), objPunto.getY());
}
确保您了解何时调用超类的构造函数。请记住,当您进行扩展时,它仍然会创建超类,这意味着如果有任何信息需要创建自己,那么您需要调用super。重要的是要注意,超级必须是你打电话的第一件事。