1

我有这些类:一个名为“Shape”的抽象类,一个类 Point 扩展了 Shape,一个类 Circle 扩展了 Point

我无法改变这种关系。我需要做的是在 Circle 中创建一个构造函数,它接收一个对象 Point 和一个 double 作为参数。我已经创建了一个对象点,称为点我已经尝试过:

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 尝试了一些奇怪的事情,但这也不起作用。我开始认为它可以做到,如果是这样......谁知道为什么?

谢谢!

点代码

    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() + "]";
   } 
} 
4

4 回答 4

2

您的圈子正试图调用super();它的第一步,但Point没有默认的无参数构造函数。您必须调用将参数作为 Circle 构造函数的第一行的 super 方法。

尝试super(objPunto.getX(), objPunto.getY());作为 Circle 构造函数中的第一个调用

于 2012-11-11T03:26:40.870 回答
1

我认为您可以调用super()前两个参数,如下所示:

    public Circle (Point objPunto, double valorRadio){   
      super(objPunto.getX(), objPunto.getY());
      setRadio(valorRadio);
    }

super()调用 的构造parent class函数,如果使用,它应该是子构造函数中的第一条语句。

于 2012-11-11T03:27:05.797 回答
0

如果您的类Circleextends Point,那么它可以访问它的成员。无需创建new Point()

public Circle (Point objPunto, double valorRadio){   
  setX(objPunto.getX());
  setY(objPunto.getY());
  setRadio(valorRadio);
}
于 2012-11-11T03:24:19.383 回答
0

有了你刚刚提供的信息,你应该做这样的事情

public Circle (Point objPunto, double valorRadio) {
    super.(objPunto.getX(), objPunto.getY());
}

不过,请确保您了解何时调用超类的构造函数。请记住,当您扩展时,它仍然会创建超类,这意味着如果它们需要创建自己的任何信息,那么您需要调用 super。重要的是要注意 super必须是你调用的第一件事。

于 2012-11-11T03:29:30.303 回答