【问题标题】:printing in the same line in java在java中的同一行打印
【发布时间】:2010-05-31 05:59:31
【问题描述】:

我有一个名为 Items 的基类和 3 个派生类,在 Items 基类中我有一个表单的打印函数

public void print(){
        System.out.println("ID " + id + " Title " + title + " <" + year + "> ");
    }

在每个派生类中,我通过super.print(); 调用Items 打印函数,然后是与派生类相关的特定打印函数。

我的问题是,每当从派生类之一执行打印时,打印的文本不在同一行。所以super.print() 将在派生类打印函数上方的行中。如何让它们都在同一行?

【问题讨论】:

    标签: java inheritance printing


    【解决方案1】:

    您不能在打印后安全地收回换行符(输出退格符的工作取决于终端,但您真的不想这样做)。我认为构建它的合乎逻辑的方法可能是拥有一个超类功能:

    public void print() {
        System.out.println(toString());
    }
    

    然后根据需要覆盖toString

    超类

    public String toString() {
        return "ID " + id + " Title " + title + " <" + year + "> ";
    }
    

    子类

    public String toString() {
        return super.toString() + " ... more stuff";
    }
    

    【讨论】:

      【解决方案2】:

      不要在基类上使用println,而是使用print

      【讨论】:

      • 我想他希望函数在调用时输出换行符,但前提是它由用户直接调用而不是子类 - 即他不想做foo.print(); System.out.println();
      • 实际上 - 我同意。覆盖 ToString() 是一种更好的方法。
      【解决方案3】:

      println 替换为System.out.print

      【讨论】:

        【解决方案4】:

        看起来覆盖toString() 更合适,在这里。然后,您可以在需要的地方控制打印,它可以转到System.out、文件、记录器以及其他所有内容。

        @Override public String toString() {
           return String.format("ID %s Title %s <%d> ", id, title, year);
        }
        

        然后在子类中:

        @Override public String toString() {
           return super.toString() + " whatever";
        }
        

        API 链接

        相关问题

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2018-03-20
          • 1970-01-01
          • 2011-11-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多