[英]How to use Java subclasses
我有 3 个课程,书籍、儿童书和图书馆。 ChildrensBook 扩展了图书 class。 ChildrensBook 包含附加变量 RecommendedAge。 Library 包含一个数组,该数组可以包含 Book 和 ChildrensBook 对象。 在 class 库中,我必须创建 int forChildren(int n) 方法,它返回数组库中有多少年龄小于或等于 n 的儿童书。 问题是图书馆数组中既有 Books 又有 ChildrensBooks,所以我无法访问 RecommendedAge 变量,因为它只在儿童读物中。 我能怎么做?
public class Library {
private ArrayList <Book> collection;
public Library(ArrayList <Book> c){
collection=c;
}
public int forChildren(int n) {
int count=0;
for(int i=0;i<collection.size();i++) {
if((collection.get(i).getRecommendedAge)<=n) {
count++;
}
}
return count;
}
public class Book {
private String title;
private String author;
public Book(String title, String author){
this.title=title;
this.author=author;
}
}
public class ChildrensBook extends Book {
private int recommendedAge;
public ChildrensBook(String title,String author,int recommendedAge){
super(title,author);
this.recommendedAge=recommendedAge;
}
public int getRecommendedAge() {
return recommendedAge;
}
}
基本上我看到了三种可能的方法:
将有关推荐年龄的知识拉到Book
class 中,以便每本书都有推荐年龄,尽管您需要确定非儿童书籍的推荐年龄。
如果一Book
是否是儿童读物,决定是否对书籍进行迭代——这可以使用 Java 的instanceof
运算符来实现,尽管这不是特别面向 object 的。
为书籍添加类似于isValidForAge
的方法,以确定书籍是否对特定给定年龄有效,每个儿童书籍都根据推荐年龄回答,而每个非儿童书籍都需要根据其他标准回答。
这是不正确的 class 设计。 你混合了对书籍分类(儿童、成人、科幻小说、幽默)的关注,这更像是一个类别或“标签”和特定的行为(适合观众)。
您可以决定制作 Book class 抽象并从中继承具体的 AdultBook class。 正如其他答案中已经提到的,您可以拥有一本仍然适合儿童的成人书籍。 比方说传记或百科全书。
这意味着,您可能希望对收藏中的每本书都执行getRecommendedAge()
。
您可以使用instanceof
运算符来检查 object 的类型。 试试下面的代码:
public class Library {
private ArrayList<Book> collection;
public Library(ArrayList<Book> c) {
collection = c;
}
public int forChildren(int n) {
int count = 0;
for (int i = 0; i < collection.size(); i++) {
if (collection.get(i) instanceof ChildrensBook) {
if (((ChildrensBook) collection.get(i)).getRecommendedAge() <= n) {
count++;
}
}
}
return count;
}
public class Book {
private String title;
private String author;
public Book(String title, String author) {
this.title = title;
this.author = author;
}
}
public class ChildrensBook extends Book {
private int recommendedAge;
public ChildrensBook(String title, String author, int recommendedAge) {
super(title, author);
this.recommendedAge = recommendedAge;
}
public int getRecommendedAge() {
return recommendedAge;
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.