【发布时间】:2023-03-22 06:17:01
【问题描述】:
我是 Java 和面向对象编程的新手,但渴望在 Java 方面做得更好并参与到 stackoverflow 社区中。
我怀疑这个问题有一个简单的解决方案,但我无法在任何地方找到答案。 我有一堆书籍细节存储在一个数组列表中,每个都有不同的细节级别(即工程书籍的额外字符串“主题”,而标准书籍只有 3 个变量)。 我想知道是否可以从存储在 ArrayList 中的值调用每个书籍类的 toString 方法? 或者,是否可以将每个不同书籍类方法的 toString 输出存储在 ArrayList 中?
这样,如果有工程教科书,它将显示数组列表中的所有详细信息,而编程教科书将显示较少的细节(如果字符串字段为空,则不会留下“null”。
即数组列表将打印:
教科书 1:Java101/Migoreng 博士/1331/Java 教科书2:Python201/Karl博士/112/Python 教科书 3:Fluids101/Dr Brisbane/122/GIS/Modelling(那里有额外的字段)
等等……
如果任何人都可以提供可能有帮助的关键字,那将不胜感激。
谢谢
代码如下:
构建 ArrayList 的 TestTextBooks 类:
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());
}
}
编程教科书类(如果可用,添加字段“语言”)
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;
}
}
工程教科书类(添加领域语言和主题)
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;
}
}
抽象教科书类(定义作者、标题和页数)(由所有书籍共享)
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;
}
}
【问题讨论】: