2012-01-03 10 views
3

私は、Javaの新しいMと私は、単純な問題があります。引数として2つの初期オブジェクトを含む拡張クラスからオブジェクトのコンストラクタを作成するにはどうすればよいですか?

私は次のクラスのポイントを持っている:

public class Point { 

    private int yAxis; 
    private int xAxis; 

    public Point (int x, int y) 
    { 
     xAxis = x; 
     yAxis = y; 
    } 
} 

私はクラスPointを拡張する新しいクラスを作成します。新しいクラスが引数として2つのオブジェクトPointを取るようにしたい。次のコードを記述しましたが、暗黙のスーパーコンストラクタMyPoint()は未定義です。明示的に別のコンストラクタを呼び出さなければなりません "。どのように問題を解決できますか?

ありがとうございます! RectangleクラスがPointsに言及ので、あなただけのextends Pointを使用してはならない

public class Rectangle extends Point { 

    private int length1; 
    private int height1; 

    public Rectangle(int x, int y, int l, int h) { 
     super(x, y); 
     l = length1; 
     h = height1; 
    } 

    public Rectangle(Point topLeft, Point bottonRight) { 


    } 
} 
+0

また、FYI:コンストラクタのパラメータ値にフィールド値を割り当てるのは意味がありません。たとえば、 'l = length1'と書いてください。 – Tom

+0

また、質問をするより明確な方法は、 "スーパークラスに依存するサブクラスを作成するにはどうすればよいですか?" – Tom

答えて

0

extendsキーワードは、is-aの関係を宣言するために使用されます。 は長方形のポイントですか?

あなたはおそらくimportPointクラスをすべきである「このクラスは、ポイント・クラスを使用してだろう」と言っしようとしている場合。

(あなたがextends Pointを除去することによって、エラーを修正します。)

+0

extedsポイントを削除せずに問題を解決できますか? – voimak

+0

はい(しかしそれはばかげているでしょう:) 'Rectangle'は*が*' Point'なので、 'Point'コンストラクタに引数(' x'と 'y')を与える必要があります。 2番目の 'Rectangle'コンストラクタの先頭に' super(0、0) 'を追加することでこれを行います。 – aioobe

+1

@voimak:スーパーコンストラクタを 'topLeft' Pointのxプロパティとyプロパティで呼び出すこともできます:super(topLeft.getX()、topLeft.getY())'これはあなたが本当に欲しいのであれば矩形を点として扱うことができる。 –

1

その他では、継承を使うべきではないと述べています。私は完全に同意します。しかし、このような事柄については、Javaが効果的な参考資料であることがわかりました。私はそれが自分の答えにふさわしいと考えています。詳細については、Effective Java Item 16: Favor composition over inheritanceを参照してください。

+0

私は本当に本全体を読むことを本当にお勧めします! – Tom

関連する問題