【发布时间】:2019-08-28 22:34:29
【问题描述】:
我是编程新手,一周前刚刚学习了继承,并且对如何设计扩展其他类的适当类有疑问。 下面的代码是将所有银行账户对象存储到 ArrayList 中的 Bank 类,这就是我在 Bank 类中扩展类 ArrayList 的原因.
问题1:Bank class属性是ArrayList。这就是我在构造函数内部调用super() 的原因。由于Bank类扩展了ArrayList,因此可以通过调用super()创建属性,我认为除了我通过调用super()创建的属性之外,bank中不需要其他私有属性。这是进行继承的正确方法吗?
问题2:由于没有属性,我通过ObjectOuputStream卡在序列化上。我想写 ArrayList(我在构造函数中通过 super() 创建的属性),但不能因为我不知道如何引用我在超级构造函数中创建的 ArrayList 属性。我尝试了 writeObject(this),但它显然不起作用。 如何序列化ArrayList?
问题3:如果这是实现Bank类继承的正确方法,我如何从ObjectInputStream加载ArrayList?因为没有属性,所以不知道怎么引用我在super()中做的属性,所以做了这样的事情
this = (ArrayList)ois.readObject()
但是没用……没有属性的情况下如何使用反序列化加载ArrayList?
public class Bank extends ArrayList<Account> implements Serializable{
//no attribute
public Bank(){
super();
}
//other methods...
public void saveToBinary() throws IOException{
FileOutputStream fos = new FileOutputStream("Bank_Account_Inherit_Binary.txt");
ObjectOutputStream oos = new ObjectOutputStream(fos);
oos.writeObject(this);//can't do this
oos.flush();
oos.close();
}
public void loadFromBinary() throws IOException, ClassNotFoundException{
FileInputStream fis = new FileInputStream("Bank_Account_Inherit_Binary.txt");
ObjectInputStream ois = new ObjectInputStream(fis);
Object object = ois.readObject();
this = (ArrayList<Account>)object;//not working b/c "this" is final variable
}
}
【问题讨论】:
-
对于那些好奇如何解决这个问题的人,您可以简单地将对象从文件转换为 ArrayList
,然后通过 this.add() 迭代并添加所有元素。
标签: java oop inheritance serialization objectoutputstream