You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java如何判断存储Book父类对象的ArrayList中元素所属的子类

实现方案

以下是两种常用实现方式,按需选择即可:


方案1:使用instanceof直接判断类型(最小改动现有代码)

步骤1:修改bookSearch方法返回匹配的书籍对象

原方法仅返回布尔值,调整为找到匹配书籍就返回对应的Book实例,找不到返回null:

// 修改LibraryMain中的bookSearch方法
public Book bookSearch(String bookTittle)
{
    for (int i = 0;i<LibBook.size();i++)
    {
        Book book = LibBook.get(i);
        if(book.getTittle().equalsIgnoreCase(bookTittle)){
            return book;
        }
    }
    return null;
}

步骤2:修改main方法的搜索逻辑,判断返回对象的类型

public static void main(String[] args) {
    LibraryMain mainLib = new LibraryMain();
    Scanner in = new Scanner(System.in);
    System.out.println("--Search book--");
    System.out.print("Book tittle: ");
    String tittle = in.nextLine();
    Book result = mainLib.bookSearch(tittle);
    if(result != null){
        String type = "";
        if(result instanceof Science){
            type = "science";
        }else if(result instanceof Fiction){
            type = "fiction";
        }
        System.out.printf("Book Found! %s is a %s book%n", result.getTittle(), type);
    }
    else{
        System.out.println("Not Found");
    }
}

方案2:父类新增类型方法(更符合面向对象设计,扩展性强)

如果后续会新增更多书籍子类,推荐用这种方式,避免不断新增instanceof判断分支。

步骤1:修改Book类,新增获取书籍类型的方法

public class Book {
    private String bookTittle;
    private String bookAuthor;

    public Book(String tittle, String author)
    {
        this.bookTittle = tittle;
        this.bookAuthor = author;
    }

    public String getTittle()
    {
        return bookTittle;
    }
    
    // 新增方法,子类重写即可返回对应分类
    public String getBookType(){
        return "unknown";
    }

    // other getter and setter
}

步骤2:分别在两个子类重写getBookType方法

Science类新增重写逻辑:

@Override
public String getBookType() {
    return "science";
}

Fiction类新增重写逻辑:

@Override
public String getBookType() {
    return "fiction";
}

步骤3:修改main方法逻辑直接调用方法即可

public static void main(String[] args) {
    LibraryMain mainLib = new LibraryMain();
    Scanner in = new Scanner(System.in);
    System.out.println("--Search book--");
    System.out.print("Book tittle: ");
    String tittle = in.nextLine();
    Book result = mainLib.bookSearch(tittle);
    if(result != null){
        System.out.printf("Book Found! %s is a %s book%n", result.getTittle(), result.getBookType());
    }
    else{
        System.out.println("Not Found");
    }
}

内容的提问来源于stack exchange,提问作者Deni

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 07:45:01