Могу ли я создать метод DataOutputStream для абстрактного класса и использовать его для подклассов? - PullRequest
0 голосов
/ 02 марта 2012

У меня есть книжный класс:

public abstract class Book
{
private String author, title;
private int pages;
private double price;
Book next;

public Book( String f, String t, int sider, double p )
{
    author = a;
    title = t;
    pages = pa;
    price = p;
    next = null;
}

И подклассы, такие как романы, учебники и так далее.Мне нужен метод, чтобы записать их в файл с DataOutputStream.Я сделал этот код ниже, но я не уверен, что я на правильном пути.Как бы я использовал это в подклассе?

public void writeObjectToFile()
{
    try
    {
        FileOutputStream fos = new FileOutputStream("book.something");
        DataOutputStream dos = new DataOutputStream(fos);

        dos.writeUTF(author);
        dos.writeUTF(title);
        dos.writeInt(pages);
        dos.writeDouble(price);         


    }catch (IOException e){
        e.printStackTrace();
    }
}

Допустим, учебный класс выглядит так:

class Textbook extends Book
{
private String subject;

public Textbook( String a, String t,int pa, double p, String sub )
    {
    super( a, t, pa, p );
    subject = sub;
}

Есть идеи?Мне не разрешено использовать ObjectOutputStream.

1 Ответ

1 голос
/ 02 марта 2012

Метод должен принимать OutputStream в качестве аргумента, а не создавать его сам.

Таким образом, подклассы могут начинаться с вызова метода super для записи полей суперкласса, а вызывающие пользователи могут выбирать, куда записывать данныевместо того, чтобы принудить класс книги использовать файл в определенном месте.

Метод также должен генерировать IOException, а не игнорировать его.Таким образом, вызывающий абонент может делать то, что он хочет, чтобы справиться с этим.

...