2

私はちょうどこのトピックから始めました。私の理解では、クラスのインスタンス変数を保存して後で使用できるようにしたい場合は、メソッドが定義されていない「シリアル化可能な」インターフェースを使用できます...継承...スーパークラスがシリアル化されていないのに対し、サブクラスはシリアル化されているとします...スーパークラスのインスタンス変数を保存できますか?? ただし、私はこれを知っています...スーパークラスのコストラクタが呼び出されて実行されます...しかし、それはどういう意味ですか? ということですか、スーパークラスのインスタンス変数を保存できません....

以下のプログラムでは...作成されたファイルには数値(43,23)または変数「身長」と「体重」のみが保存されます???

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

}

}
4

2 に答える 2

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

}
于 2013-11-15T01:01:00.300 に答える
1

サブクラスがシリアル化されているのに対し、スーパークラスはシリアル化されていないとします...スーパークラスのインスタンス変数を保存できますか?

はい、ただし、エフゲニーの回答に示されているように、追加のコードを記述する必要があります。

ただし、私はこれを知っています...スーパークラスのコストラクタが呼び出されて実行されます...しかし、それはどういう意味ですか? ということですか、スーパークラスのインスタンス変数を保存できません....

これでは何の意味もありませんが、先ほどの質問を繰り返すだけなら、答えも同じです。

以下のプログラムでは...作成されたファイルには数値(43,23)または変数「身長」と「体重」のみが保存されます???

それも意味がわからない。無問です。それはあなたが渡すオブジェクトを格納し、それがあなたの場合、整数ではなくオブジェクトwriteObject(),から返されます。readObject().serialio1

于 2013-11-15T02:17:38.737 に答える