[英]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
實現readObject
和writeObject
,如下所示:
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.