2013-03-20 54 views
1

我有類Osoba(人)和Zawodnik(Constestant)序列化多態對象的

Contestant延伸PersonPerson實現SerializableConstestant也自動執行Serializable嗎?我想是這樣。

Person類的擴展名(ArrayList ekstensja)包含擴展類Person的不同類的對象。 Person類中的方法zapiszEkstensje()會正常工作嗎?我想是這樣。

實施例:

public abstract class Osoba implements Serializable { 
/....something..../ 

    private static ArrayList<Osoba> ekstensja = new ArrayList<Osoba>(); 

    private void dodajZawodnik(Osoba osoba) { 
     ekstensja.add(osoba); 
    } 

    private void usunZawodnik(Osoba osoba) { 
     ekstensja.remove(osoba); 
    } 

    public static void pokazEkstensje() { 
     for (Osoba zawodnik : ekstensja) 
      System.out.println(zawodnik + "\n"); 

    } 

    public static void zapiszEkstensje() { 
     try { 
      ObjectOutputStream outputStream = new ObjectOutputStream(new FileOutputStream("osoba.ser"));             
      outputStream.writeObject(ekstensja); 
      outputStream.close(); 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } 
    } 

    @SuppressWarnings("unchecked") 
    public static void wczytajEkstensje(){ 
     try { 
      ObjectInputStream inputStream = new ObjectInputStream(new FileInputStream("osoba.ser"));             
      ekstensja = (ArrayList<Osoba>) (inputStream.readObject()); 
      inputStream.close(); 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } 
    } 
} 

public class Zawodnik extends Osoba { } 
// DO I NEED TO MAKE THIS CLASS IMPLEMENT SERIALIZABLE TOO? 

回答

1

根據Serializable接口的Java文檔,可序列化類的所有亞型本身可序列化。

所以,答案是肯定的,如果Person implements Serializable它的所有孩子都會被序列化。