1

サブクラスからスーパークラス データ メンバーにアクセスできません。

だから私はこのようなスーパークラスストアを持っています

public class Store {
    protected ArrayList<Audiobooks> ab;

    public Store(ArrayList<Audiobooks> ab)
    {
        this.ab = ab;
    }
    ...
}

ab が初期化され、すべてが完了すると、次のようなサブクラスができます

public class Customer extends Store {

    ...
    public Customer(String id, String name, String address)
{
    this.id = id;
    this.name = name;
    this.address = address;
    }
    public void printAb(){
        for(int i = 0; i<ab.size(); i++){
            System.out.println(ab.get(i).toString());
        }
    }
}

結局、ヌル ポインター例外エラーが発生します。関数が store クラスに配置されている場合は正常に動作しますが、サブクラス Customer にある場合は null ポインター例外が発生します。

super.ab.... を使用して取得しようとしましたが、成功しませんでした。

洞察をありがとう。

4

3 に答える 3

3

Customerコンストラクターはコンストラクターを呼び出さないStoreため、abリストがインスタンス化されることはありません。

これを解決するには、カスタマー コンストラクターでストア コンストラクターを呼び出す必要があります。

public Customer(String id, String name, String address) {
    super(new ArrayList<Audiobooks>());
    this.id = id;
    this.name = name;
    this.address = address;
}

または、顧客のコンストラクターにリストをインスタンス化してもらいます。また、store クラスには複数のコンストラクターが必要です。そうしないと、表示しているコンストラクターを呼び出すようコンパイラーによって強制されます。クラスを有効な状態にしない場合は、明らかにストア クラスにある空のコンストラクターを取り除くことを検討することをお勧めします。

于 2013-02-10T02:43:15.120 に答える
1

プロパティに適切にアクセスしabます (そうしないと、コンパイラ エラーが発生します)。

ほとんどの場合、どこにもオブジェクトを作成していません。試してみてください

 protected ArrayList<Audiobooks> ab = new ArrayList<Audiobooks>();

また、最も一般的なインターフェースを使用する方が良いでしょうList

 protected List<Audiobooks> ab = new ArrayList<Audiobooks>();
于 2013-02-10T02:21:22.027 に答える
0

これをやってみてください。

public class Customer extends Store {

    ...
    public Customer(ArrayList<Audiobooks> a,String id, String name, String address)
{
    super(a);
    this.id = id;
    this.name = name;
    this.address = address;
    }
    public void printAb(){
        for(int i = 0; i<ab.size(); i++){
            System.out.println(ab.get(i).toString());
        }
    }
}

またはこれを行う

public class Customer extends Store {

        ...
        public Customer(String id, String name, String address)
    {
        a=new ArrayList<Audiobooks>(/*initial size*/);
        this.id = id;
        this.name = name;
        this.address = address;
        }
        public void printAb(){
            for(int i = 0; i<ab.size(); i++){
                System.out.println(ab.get(i).toString());
            }
        }
    }
于 2013-02-10T02:53:22.217 に答える