电影票父类public abstract class Ticket
字段:Movie movie, Seat seat, int price
方法:compute(), print(), toString().
电影票子类 StudentTicket, FreeTicket, GeneralTicket.
子类分别实现各自的继承自父类的三个方法,compute()方法实现各自票价的计算方法,print()方法实现各自对象反序列化到指定文件中保存,toString()方法实现各自打印输出电影票功能。
电影院类public class Cinema
字段:Schedule schedule, List<Ticket> soldTickets
方法:load(), save(), printTicket(Ticket ticket).
方法load()功能
实现从保存序列化信息的文件中读取出保存电影票对象信息。
在方法内部,要首先判断读取的文件存在与否,如果不存在需要先创建,如果存在就反序列化。反序列化时,直接用一个List<Ticket>类型的集合去接收readObject()方法返回的信息,当然同时需要用(List<Ticket>)强制转换readObject()方法返回的信息,不然编译时将会报错。接下来将读取到的已售电影票保存在字段soldTickets中,接着遍历集合输出。
方法save()功能
该方法实现的功能是将字段soldTickets中的电影票信息通过序列化保存在指定文件中。
在方法内部,先获取保存有已售电影票信息的字段,然后将此字段soldTixkets作为参数传进writeObject()方法中。
方法printTicket(Ticket ticket)功能
未完待续
电影票类,子类和父类都重写了equals和hashcode方法,list集合在添加元素的时候要调用equals方法来判断要添加的元素是否与集合中的元素相同,这时候就可以根据你自己的要求来重写这两个方法,我就是根据你的代码重写了这两个方法。另外折扣和赠票者姓名我觉得是可以重复的,就没有写在那两个方法及。
已售出的电影票,不管是序列化还是反序列化的时候都要用到,所以直接用一个成员变量储存比较好,而且运行过程中得到的电影票可以还要与这个变量里的其他电影票比较,如果没有售出就需要添加进来,这样看来,这个变量要用到的地方比较多,所以声明成成员变量比较好。
网友评论