2013-03-20 77 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它的所有孩子都会被序列化。