java - 我可以为抽象类创建一个 DataOutputStream 方法并将其用于子类吗?

标签 java abstract dataoutputstream

我有一个读书课:

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

最佳答案

该方法应将 OutputStream 作为参数,而不是自行创建它。

这样,子类就可以通过调用 super 方法来写入父类(super class)字段,调用者可以选择将数据写入哪里,而不是被书籍类强制使用特定位置的文件。

该方法还应该抛出 IOException,而不是忽略它。这样,调用者就可以做他想做的事情。

关于java - 我可以为抽象类创建一个 DataOutputStream 方法并将其用于子类吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9529715/

相关文章:

java - Processing 3 : using background subtraction, 视频不播放

c++ - 在UE4中,为什么要重写BeginPlay,为什么要在重写的BeginPlay中调用Super::BeginPlay?

java - 在 DataOutputStream 上同步

java - ServerSocket 与 Socket——关闭套接字

java - 向客户端提供/导出可执行文件

java - Spring JPA 映射 - 第一步

java - 对象类、java API

java - 如何强制子类调用抽象实现的方法

android - 我的客户端将连接到服务器,仅此而已

Java 服务器 - 如何从 InputStreamReader 获取输入并将其转换为字符串?