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
相关产品推荐
相关产品推荐

