Java - 将对象作为参数传递给构造函数...来自超类

时间:2012-11-11 03:16:04

标签: java inheritance constructor subclass superclass

我有这些类:一个名为“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() + "]";
   } 
} 

4 个答案:

答案 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。重要的是要注意,超级必须是你打电话的第一件事。