1

私はこれらのクラスを持っています:「Shape」と呼ばれる抽象クラス、クラスPointはShapeを拡張し、クラスCircleはPointを拡張します

この関係を変えることはできません。私がする必要があるのは、パラメーターとしてオブジェクトPointとdoubleを受け取るCircleでコンストラクターを作成することです。私はすでにこれを試したポイントと呼ばれるオブジェクトポイントを作成しました:

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()以下のように、最初の2つの引数を呼び出すことができると思います。

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

super()のコンストラクターを呼び出しますparent class。使用する場合は、子コンストラクター内の最初のステートメントにする必要があります。

于 2012-11-11T03:27:05.797 に答える
0

クラスCircleが拡張されている場合は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());
}

ただし、スーパークラスのコンストラクターをいつ呼び出すかを必ず理解してください。拡張する場合でも、スーパークラスが作成されることを忘れないでください。つまり、スーパークラスが自分自身を作成するために必要な情報がある場合は、スーパーを呼び出す必要があります。そして、あなたがそうするなら、スーパーはあなたが最初に呼ぶものでなければならないことに注意することが重要です。

于 2012-11-11T03:29:30.303 に答える