-1

現在、Java の拡張クラスを理解しようとしています。

何が行われたか: 私はクラスを作成し、彼のためにクラスを拡張します。拡張クラスでは、単純なコマンドでコンストラクターを作成します - スーパークラスからの変数を表示します。別のファイルで拡張クラスのオブジェクトを作成しようとしましたが、エラーが発生しました - 「CObj 型の囲みインスタンスにアクセスできません。CObj 型の囲みインスタンスで割り当てを修飾する必要があります (egxnew A() x は CObj のインスタンスです)。 )

コード:メインファイル

public class Demo {
    public static void main (String[] args){
        CObj.Co n=new CObj.Co();
        n.show();
    }
}

クラスを含むファイル

class CObj {
    int i,k,l;
    CObj summ (CObj object){
        object.i*=i;
        object.k*=k;
        object.l*=l;
        return object;
   }
   void show (){
       System.out.println("this is super class");
       System.out.println(i+" "+k+" "+l);
   }

...少数のコンストラクター...および拡張クラス

class Co extends CObj{
    Co(){
        super(1,2,3);
    }
    void show(){
        System.out.println("this is extended class and overloaded meth");
        super.show();
    }
}

質問; 何が間違っていたのですか?なぜこのエラーが発生し、何を変更する必要があるのですか? それとも、私は何か悪いことをしているのだろうか?

4

3 に答える 3

4

あなたのエラーメッセージを考えると:

「タイプ CObj の囲みインスタンスにアクセスできません。タイプ CObj の囲みインスタンスで割り当てを修飾する必要があります (x は CObj のインスタンスである xnew A())。」

それはネストされた(静的内部)クラスではなく、Coの内部クラスであると言います。したがって、次のインスタンスを使用してCObjのみアクセスできます。CoCObj

Cobj.Co obj = new CObj().new Co();

ただし、作成中に内部クラスが必要であることを本当に確認する必要があります。また、@JBNizet が示唆するように、各クラスを独自のファイルに配置する必要があります。これにより、クラスがどのように相互作用するかを理解しやすくなります。そして、次をCo使用して簡単にオブジェクトを作成できます。

Co obj = new Co();

Co次に、存在しないからスーパー クラス コンストラクターを呼び出そうとしています。

super(1,2,3);

CObjには、3 つの整数パラメーターを取るコンストラクターがありません。それもコンパイルされません。

于 2013-08-11T09:50:46.950 に答える
2

あなたの構文はここで間違っています:

CObj.Co n=new CObj.Co();

あなたはただ書くことができます:

Co obj = new Co();

また、基本クラス CObj には (int, int, int) コンストラクタがないため、クラス Co の次の行は間違っています。

super(1,2,3);

呼び出しを既存の CObj(CObj オブジェクト) に変更するか、CObj(int a, int b, int c) を記述します。

于 2013-08-11T09:53:39.937 に答える
2

ここにあなたの問題の1つがあるようです:

  Co(){
        super(1,2,3);
    }

スーパークラスにそのようなコンストラクターがありません。

于 2013-08-11T09:49:42.627 に答える