如何从存储在 ArrayList 中的方法 return toString 方法

How to return toString method from methods stored in an ArrayList

我是 java 和 object 面向编程的新手,但渴望在 java 方面做得更好并参与 Whosebug 社区。

我怀疑这个问题有一个简单的解决方案,但我无法在任何地方找到答案。 我有一堆书籍详细信息存储在数组列表中,每个都有不同级别的详细信息(即工程书籍有一个额外的字符串 "subject",而标准书籍只有 3 个变量)。 我想知道是否可以从 ArrayList 中存储的值调用每本书 class 的 toString 方法? 或者,是否可以将每个不同书籍 class 方法的 toString 输出存储在 ArrayList 中?

这样,如果有工程教科书,它将显示数组列表中的所有详细信息,而编程教科书将显示较少的详细信息(如果字符串字段为空,则不保留 'null'。

即arraylist 将打印:

教科书 1:Java101/DrMigoreng/1331/Java 教材 2:Python201/DrKarl/112/Python Textbook3:Fluids101/Dr Brisbane/122/GIS/Modelling(那里有额外的字段)

等...

如果有人能提供一个可能有帮助的关键字,我们将不胜感激。

谢谢

代码如下:

构建 ArrayList 的 TestTextBooks class:


import java.util.ArrayList;

public class TestTextbooks {  

        public static void main(String[] args) {
            Textbook java101 = new ProgrammingTextbook("Java101","Dr Migoreng",1331,"Java");
            Textbook python201 = new ProgrammingTextbook("Python201","Dr Karl",112,"Python");
            Textbook fluidMechanics = new EngineeringTextbook("Fluids101","Dr Brisbane",122,"GIS","Fluid Mechanics");
            Textbook modelling101 = new EngineeringTextbook("Modelling101","Dr Suzuki",322,"WaterGems","Water Modelling");

      ArrayList books = new ArrayList();
      books.add(java101); 
      books.add(python201); 
      books.add(fluidMechanics);
      books.add(modelling101);

      System.out.println("" + books.toString());
            }    
    }

编程教科书 class(如果可用,添加字段 "language")

public class ProgrammingTextbook extends Textbook {
    private String language;
    private String title;
    private String author;
    private int pages;


    public ProgrammingTextbook (){
    }

        //overloaded constructor
    public ProgrammingTextbook (String title, String author,int pages,String language){
        this.title = title;
        this.author = author;
        this.pages = pages;
        this.language=language;
    }
    //set method for overloaded constructor
    public void setProgrammingTextBook (String title, String author,int pages,String language){
        setLanguage(language);
    }
     //individual set methods
    public void setLanguage(String language){
        this.language = language;
    }
    //individual get methods
    public String getLanguage(){
        return language;
    }  
    public String toString(String title, String author,int pages,String language){
        return title + "/" + author + "/" + pages + "/" + language;
    }

}

工程教材 class(添加领域语言和主题)

public class EngineeringTextbook extends Textbook {
    private String language;
    private String subject;
        //default constructor (probs shouldn't actually have values)
        public EngineeringTextbook (){
    }
    //overloaded constructor
    public EngineeringTextbook (String title, String author,int pages,String language,String subject){
        this.title = title;
        this.author = author;
        this.pages = pages;
        this.language=language;
        this.subject=subject;
    }
    //set method for overloaded constructor
    public void setEngineeringTextBook (String title, String author,int pages){
        setLanguage(language);
        setSubject(subject);
    }
        //individual set methods
    public void setLanguage(String language){
        this.language = language;
    }
    public void setSubject(String subject){
        this.subject = subject;
    }

    //inbdividual get methods
    public String getLanguage(){
        return language;
    }
    public String getSubject(){
        return subject;
    }

    //toString method
    public String toString(String title, String author,int pages,String language,String subject){
        return title + "/" + author + "/" + pages + "/" + language + "/" + subject;
    }
}

抽象教科书 Class(定义作者、标题和页码)(所有书籍共享)

public abstract class Textbook {

    protected String title;
    protected String author;
    protected int pages;

    //default constructor (Don't really need to add null for all values but put in to show it is a default constructor
    public Textbook (){
        this.title = null;
        this.author = null;
        this.pages = 0;
    }
    //overloaded constructor
    public Textbook (String title, String author,int pages){
        this.title = title;
        this.author = author;
        this.pages = pages;
    }
    //individual set methods
    public void setTitle(String title){
        this.title = title;
    }
    public void setAuthor(String author){
        this.author = author;
    }
    public void setPages(int pages){
        this.pages = pages;
    }
    //individual get methods
    public String getTitle(){
        return title;
    }
    public String getAuthor(){
        return author;
    }
    public int getPages(){
        return pages;
    }
    //abstract toString method
    public String toString(String title, String author,int pages){
       return title + "/" + author + "/" + pages;
    }   
}

Object.toString() 接受任何参数。当您未能正确覆盖方法时,使用 @Override 注释来捕获它。

@Override
public String toString() {
    return title + "/" + author + "/" + pages + "/" + language;
}

@Override
public String toString() {
   return title + "/" + author + "/" + pages;
}   

等等