首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Java -多态问题

Java -多态问题
EN

Stack Overflow用户
提问于 2010-03-17 00:18:21
回答 5查看 927关注 0票数 1

我有一个图书类,然后是一个小说类,还有一个扩展图书类的科学图书类。

我使用Book类制作了一个ArrayList,然后将小说和科学书籍插入其中。现在,我尝试遍历ArrayList,以计算有多少小说。我怎么知道呢?

我很想看到一些这样的例子!我已经做了一段时间了。

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2010-03-17 00:21:27

您可以使用instanceof检查对象的真实类型:

代码语言:javascript
复制
List<Book> books = new ArrayList<Book>();
books.add(aNovel);
books.add(aScienceBook);

int novelCount = 0;

for (Book book : books) {
    if (book instanceof Novel)
        novelCount++;
}
票数 4
EN

Stack Overflow用户

发布于 2010-03-17 00:19:28

使用instanceof

例如:

代码语言:javascript
复制
    int numberOfNovels = 0;
    for(int i = 0; i < arrayOfBooks.length; i++){
       if(arrayOfBooks[i] instanceof Novel){
          numberOfNovels++;
       }
    }

或者,使用foreach:

代码语言:javascript
复制
 int numberOfNovels = 0;
 for(Book book: arrayOfBooks){
    if(books instanceof Novel){
       numberOfNovels++;
    }
 }
票数 5
EN

Stack Overflow用户

发布于 2010-03-17 00:24:26

尽管Froadie说instanceof将允许您检查每个元素的特定类型是正确的,但这通常是您的设计存在问题的迹象。

也许值得考虑一下为什么你必须知道小说的数量。你想对一本书上没有的小说调用一个方法吗?您正在为所有图书使用的集合是否可能是错误的图书分组方式?如果您想要提供某种类型的计数方法,那么是否值得考虑一种抽象帐簿计数方式的方法?

如果你发现这个案例没有引起设计上的顾虑,那么instanceof就是你的答案。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2456080

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档