簡體   English   中英

將對象強制轉換為其父類以避免在Java中使用其屬性

[英]Casting an Object to its father class for avoiding its attributes in Java

我有SuperYo類擴展了Persona類,如下所示:

public class SuperYo extends Persona {

   private NotSerializableObj obj1
   private NotSerializableObj obj2
   private NotSerializableObj obj3

}

public class Persona {

   private SerializableObj sObj1
   private SerializableObj sObj2
   private SerializableObj sObj3

}

問題是,我將SuperYo中的Persona實例添加到LinkedList中:

LinkedList<Persona> list = new LinkedList<Persona>();
list.add((Persona) superYo);

它將其添加為SuperYo對象! 上面有所有的NonSerializableObjs ...,因此不能從Socket :(。發送。

因此,問題是...是否有任何方法可以將對象“下放”到其父類,因此其屬性不存在?

謝謝!

鑄造是多態性的問題。 當您將類型1的對象轉換為類型2時,實例不會更改,而只是從新的角度看實例!

如果要通過網絡發送子類,則可以使SuperYo成員成為瞬態成員,並在實例化時填充它們。 或者,您可以將writeObject()和readObject()方法添加到子類中。

SuperYo實現readObjectwriteObject ,如下所示:

 private void writeObject(ObjectOutputStream outStream) throws IOException {
    //write attributes from PersonYo only
    outStream.defaultWriteObject();
    outStream.writeObject(sObj1);
    outStream.writeObject(sObj2);
    outStream.writeObject(sObj2);
 }

private void readObject(ObjectInputStream inStream) throws IOException,
                                                          ClassNotFoundException {
    //read attributes from PersonYo only
    inStream.defaultReadObject();
    sObj1= (SerializableObj)inStream.readObject();
    sObj2= (SerializableObj)inStream.readObject();
    sObj3= (SerializableObj)inStream.readObject();
}

完成此操作后,將無需進行向下轉換。 同樣,您可以更好地控制對象中的其他不可序列化的屬性。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM