繁体   English   中英

如何从子类获取超类数据成员

[英]How to get superclass data member from subclass

我无法从它的子类访问超类数据成员。

所以我有一个像这样的超类商店

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中时,会发生空指针异常。

我试图通过使用super.ab来获得它......但没有成功。

感谢您的任何见解。

您的Customer构造函数不会调用Store构造函数,因此从不实例化ab列表。

要解决此问题,您需要让客户构造函数调用存储构造函数:

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

或者让客户构造函数实例化列表。 您还必须为商店类提供多个构造函数,否则编译器会强制您调用正在显示的构造函数。 如果没有将类放入有效状态,您可能需要考虑删除显示在商店类上的空构造函数。

您可以正确访问ab属性(否则您将遇到编译器错误)。

很可能你不是在任何地方创建对象,尝试做

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

此外,如果您使用最通用的接口List会更好

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

试试这个。

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());
            }
        }
    }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM