2016-06-20 54 views
-3

私は基本的なJavaクラスを次のように定義しています。私は3つの変数を持っています:l、b、hは長さ、幅と高さに対応します。私は基本的にスーパーキーワードを使用してサブクラスからスーパークラスのメンバーにアクセスしようとしています。暗黙的なスーパーコンストラクタは定義されていません

class dabba { 
int l, b, h; 

dabba(int l, int b, int h) { 
    this.l = l; 
    this.b = b; 
    this.h = h; 
} 

void dabbashow() { 
     System.out.println("The variables are length:" + l + " breadth:" + b + " height:" + h + "."); 
    } 
} 

私は上記のクラスを拡張する別のクラスを持っています。

class dabbaweight extends dabba { 
int w; 

dabbaweight(int l, int b, int h, int w) { 
    // super(l, b, h); 
    super.l = l; 
    super.b = b; 
    super.h = h; 
    this.w = w; 
} 

void dabbashow() { 
     System.out.println("The variables are length:" + l + " breadth:" + b + " height:" + h + " weight:" + w + "."); 
    } 

} 

私は別のクラスでmain関数を以下のように提供しました。

public class Rando2 { 
    public static void main(String[] args) { 
     dabba mydabba1 = new dabba(1, 2, 3); 
     dabbaweight mydabba2 = new dabbaweight(10, 20, 30, 100); 
     mydabba1.dabbashow(); 
     mydabba2.dabbashow(); 
    } 
} 

そして、次のエラーが発生します。

Exception in thread "main" java.lang.Error: Unresolved compilation problem: 
Implicit super constructor dabba() is undefined. Must explicitly invoke another constructor 

at dabbaweight.<init>(Rando2.java:17) 
at Rando2.main(Rando2.java:33) 

このエラーは何ですか?これをどうすれば解決できますか? ありがとうございます。

+2

アンコメントこの下記好きな変更次のコード

dabbaweight(int l, int b, int h, int w) { // super(l, b, h); super.l = l; super.b = b; super.h = h; this.w = w; } 

- '//スーパー(L、B、H);' – Eran

+0

この質問でありますすでに解決されました: [これを参照してください](http://stackoverflow.com/questions/2056097/java-extending-class-with-the-constructor-of-main-class-has-parameter) – FAlfeo

+0

@FAlfeoハイパーリンクされた質問、 私はそれを見る、 "コンストラクタの最初の文は、スーパークラスコンストラクタの呼び出しでなければなりません。 " – kiran

答えて

0

スーパークラスは、デフォルトコンストラクタ(引数なしのコンストラクタ)が、あなたのdabbaクラスのように、相対的な派生クラス(サブクラス)が明示的に無デフォルトコンストラクタのいずれかを呼び出す必要がありませんしているので、あなたが持っている場合dabbaweightクラスのコンストラクタへのコメントを削除します。

class dabbaweight extends dabba { 
    int w; 

    dabbaweight(int l, int b, int h, int w) { 
    super(l, b, h); 

    this.w = w; 
} 

    void dabbashow() { 
    System.out.println("The variables are length:" + l + " breadth:" + b + " height:" + h + " weight:" + w + "."); 
    } 
} 
+0

'super(l、b、h)'を使用して 'this.w = w'を使用すると、 'dabbaweight'のすべての変数が初期化されます。 .l、super.b、super.h)はスーパークラス変数にアクセスするために冗長になります。 – kiran

+0

スーパーコンストラクタの使用の意味は、オブジェクトを正しく初期化することです。ローカル変数にはアクセスしません。あなたのコメントは私にはあまり明確ではありません。 – Sandro

+0

あなたは正しいです!私は実際に 'this'キーワードを使ってオブジェクトのパラメータを初期化しようとしていました。私は今、私が実際にやるべきことを理解しました。これについては、ウルティムを取ってくれてありがとう! – kiran

0

dabbaweight(int l, int b, int h, int w) { 
     super(l, b, h); 
     this.w = w; 
    } 
+0

うん、それは動作します。しかし、スーパークラスのメンバーにアクセスするためにsuperキーワードを使用したいと思います。 – kiran

関連する問題