Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/315.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java—多态性问题_Java_Arrays_Polymorphism_Arraylist - Fatal编程技术网

Java—多态性问题

Java—多态性问题,java,arrays,polymorphism,arraylist,Java,Arrays,Polymorphism,Arraylist,我有一个图书班,然后是一个小说班,还有一个扩展图书班的科学图书班 我使用book类制作了一个ArrayList,然后将小说和科学书籍插入其中。现在我试着遍历ArrayList来计算有多少本小说。我怎么知道 我很想看到一些这样的例子!我已经做了一段时间了。使用instanceof e、 g 使用instanceof e、 g 您可以使用instanceof检查对象的真实类型: List<Book> books = new ArrayList<Book>(); books.a

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

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


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

使用
instanceof

e、 g


使用
instanceof

e、 g


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

List<Book> books = new ArrayList<Book>();
books.add(aNovel);
books.add(aScienceBook);

int novelCount = 0;

for (Book book : books) {
    if (book instanceof Novel)
        novelCount++;
}
List books=new ArrayList();
图书。添加(aNovel);
图书。添加(电子图书);
int novelCount=0;
用于(书籍:书籍){
如果(小说的书实例)
novelCount++;
}

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

List<Book> books = new ArrayList<Book>();
books.add(aNovel);
books.add(aScienceBook);

int novelCount = 0;

for (Book book : books) {
    if (book instanceof Novel)
        novelCount++;
}
List books=new ArrayList();
图书。添加(aNovel);
图书。添加(电子图书);
int novelCount=0;
用于(书籍:书籍){
如果(小说的书实例)
novelCount++;
}

您可以按照以下思路做一些事情:

public int getNovelCount(List<Book> bookList) {
    int novelCount = 0;
    for (Book book : bookList) {
        if (book instanceof Novel) {
            novelCount++;
        }
    }
    return novelCount;
}
public int getNovelCount(List bookList){
int novelCount=0;
用于(书籍:图书清单){
如果(小说的书实例){
novelCount++;
}
}
返回novelCount;
}

if语句仅适用于新对象,即科学图书对象在if语句中返回false,因此不被计算。

您可以按照以下方式执行操作:

public int getNovelCount(List<Book> bookList) {
    int novelCount = 0;
    for (Book book : bookList) {
        if (book instanceof Novel) {
            novelCount++;
        }
    }
    return novelCount;
}
public int getNovelCount(List bookList){
int novelCount=0;
用于(书籍:图书清单){
如果(小说的书实例){
novelCount++;
}
}
返回novelCount;
}

if语句仅适用于新对象,即科学书籍对象在if语句中返回false,因此不被计算。

尽管Froadie正确地说,
instanceof
将允许您检查每个元素的特定类型,这通常表明您的设计有问题

也许值得考虑的是,为什么你必须知道小说的数量。你想对一本书中不存在的小说调用一个方法吗?你用的所有书的收藏可能是对书进行分组的错误方式吗?如果您想提供某种计数方法,是否值得考虑一种抽象书籍计数方式


如果您发现这种情况没有引起设计问题,那么您的答案是
instanceof

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

也许值得考虑的是,为什么你必须知道小说的数量。你想对一本书中不存在的小说调用一个方法吗?你用的所有书的收藏可能是对书进行分组的错误方式吗?如果您想提供某种计数方法,是否值得考虑一种抽象书籍计数方式


如果您发现这种情况不会引起设计问题,那么您的答案是
instanceof

可以使用
instanceof
book.getClass.equals(Novel.class)
。通过for循环中的ArrayList进行任意循环:

int count = 0;
for(Book book: books){
   if(book.getClass.equals(Novel.class)) count++;
}
return count;

可以使用
instanceof
book.getClass.equals(Novel.class)
。通过for循环中的ArrayList进行任意循环:

int count = 0;
for(Book book: books){
   if(book.getClass.equals(Novel.class)) count++;
}
return count;

发布一些代码。这将帮助我们回答你的问题这是家庭作业吗?如果是这样,添加适当的标记…发布一些代码。这将帮助我们回答你的问题这是家庭作业吗?如果是这样,添加适当的标签…很好的反馈,我在做更大的事情时一定会考虑到这一点。很好的反馈,我在做更大的事情时一定会考虑到这一点。啊,这就是工作原理!非常感谢。我试图实现它。instanceof比这种方法更好。我只是建议另一种方法。啊,那就是它的工作原理!非常感谢。我试图实现它。instanceof比这种方法更好。我只是在建议另一种方法。