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

Java新手求助:如何将Book类的author改为Person类型并修改测试类

没问题,我来一步步帮你搞定这个修改~

问题拆解与实现步骤

首先明确:是的,你需要通过Person的构造器来创建作者对象,因为现在Book的author不再是简单的字符串,而是一个Person实例,而Person的核心属性(比如姓名)需要通过它自己的构造器来完成初始化,这也是面向对象封装思想的体现。


1. 先确认/完善Person类

假设你的Person类原本已经具备基础结构,如果没有的话,先补充成这样:

public class Person {
    private String name; // 作者姓名属性

    // Person的构造器,确保创建实例时必传姓名
    public Person(String name) {
        this.name = name;
    }

    // 可选:添加getter方法,方便后续从Person对象中获取姓名
    public String getName() {
        return name;
    }

    // 可选:重写toString方法,打印时能直观看到作者信息
    @Override
    public String toString() {
        return "Person{name='" + name + "'}";
    }
}

2. 修改Book类,替换author的类型

把原来String类型的author字段改成Person类型,同时调整构造器和相关方法:

public class Book {
    private String title;
    private Person author; // 将String类型替换为Person类型

    // 修改Book的构造器,接收Person类型的author参数
    public Book(String title, Person author) {
        this.title = title;
        this.author = author;
    }

    // 可选:获取作者对象的getter
    public Person getAuthor() {
        return author;
    }

    // 可选:直接获取作者姓名的快捷方法
    public String getAuthorName() {
        return author.getName();
    }

    // 可选:重写toString,方便打印书籍完整信息
    @Override
    public String toString() {
        return "Book{title='" + title + "', author=" + author + "}";
    }
}

3. 修改Test类,适配新的Book实例化逻辑

原来的Test类可能直接传字符串给Book的author参数,现在需要先创建Person对象,再把它传给Book构造器:

public class Test {
    public static void main(String[] args) {
        // 第一步:通过Person构造器创建具体的作者实例
        Person author = new Person("李华");

        // 第二步:把Person对象作为参数传入Book构造器,创建书籍实例
        Book javaBook = new Book("Java构造器入门教程", author);

        // 测试输出,验证结果
        System.out.println(javaBook);
        // 如果需要单独获取作者姓名:
        System.out.println("这本书的作者是:" + javaBook.getAuthorName());
    }
}

额外说明

  • 这样修改后,Book和Person的职责更清晰:Person负责封装作者的所有信息(后续如果要加年龄、国籍等属性,直接扩展Person类即可),Book只需要持有一个Person对象,符合面向对象的单一职责原则。
  • 如果你之前的Book类有setAuthor方法,也要把参数类型从String改成Person,确保整个类的属性类型统一。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 10:26:07