2013-11-15 76 views
2

我剛開始討論這個話題。我的理解是,如果你想保存一個類的實例變量,以便稍後可以使用...你可以使用「可序列化」接口,但沒有定義方法......但我懷疑,會發生什麼在繼承......假設我的超類沒有序列化wheras子類被序列化......我可以保存我的超類實例變量嗎? 雖然,我知道這個......超類的構造函數正在被調用,它會運行......但是dat的意思是什麼?是否意味着,我無法保存超類的實例變量....子類是可序列化的超類不可序列化

在下面的程序中...創建的文件將存儲數值(433)或只是變量「高度」和「重量「???

import java.io.*; 

class A { 

String sex; 

public void gone(String sex){ 

this.sex = sex; 

System.out.println("i m " + sex); 

} 

} 


public class serialio1 extends A implements Serializable { 

int height; 

int weight; 

public static void main(String[] args){ 

serialio1 myBox = new serialio1(); 

myBox.go(43,23); 

try{ 

FileOutputStream fs = new FileOutputStream("foo.ser"); 

ObjectOutputStream os = new ObjectOutputStream(fs); 

os.writeObject(myBox); 

os.close(); 

FileInputStream fileStream = new FileInputStream("foo.ser"); 

ObjectInputStream ms = new ObjectInputStream(fileStream); 

Object one = ms.readObject(); 

Object two = ms.readObject(); 

int h = (int) one; 

int w = (int) two; 

ms.close(); 

System.out.println("saved values" + h + w); 

} catch(Exception ex){ 

ex.printStackTrace(); 

} 

} 

public void go(int height , int weight) { 

this.height = height; 

this.weight = weight; 

System.out.println(" height is " + height); 

System.out.println(" weight is " + weight); 

} 

} 
+2

[tag:javascript]標記已被刪除。我沒有看到你的問題與JavaScript有什麼關係。你可能會用Java來混淆它嗎?另外,請考慮格式化您的發佈代碼。所有左對齊的代碼都很難閱讀和理解。 –

+0

可能重複的[java對象序列化和繼承](http://stackoverflow.com/questions/8632148/java-object-serialization-and-inheritance) –

+0

而且我得到異常....我不知道ÿ? – user2985842

回答

1

如果從子類訪問超類字段,你可以實現自定義序列

class X { 
    int x; 
} 

class Y extends X implements java.io.Serializable { 

    private void writeObject(ObjectOutputStream out) throws IOException { 
     out.defaultWriteObject(); 
     out.writeInt(x); 
    } 

    private void readObject(ObjectInputStream in) throws IOException, 
      ClassNotFoundException { 
     in.defaultReadObject(); 
     x = in.readInt(); 
    } 

} 
1

假設我超不-系列化wheras子類是序列化......可我保存我的超類實例變量?

是的,但是您必須編寫額外的代碼,如Evgeny的答案中所示。

雖然,我知道這個......超類的構造函數被調用,它會運行......但是dat的意思是什麼?是否意味着,我無法保存超類的實例變量....

我真的無法從這個方面做出任何意義,但如果您只是重複您之前的問題,答案是也一樣。

在下面的程序中...創建的文件將存儲數值(433)或只是變量「高度」和「重量」?

我無法理解這一點。這不是問題。它將存儲對象,您傳遞給writeObject(),,這就是你將從readObject().得到回報在你的情況下,一個serialio1對象,而不是整數。