首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何使用多态性对数组中的特定对象进行排序?

如何使用多态性对数组中的特定对象进行排序?
EN

Stack Overflow用户
提问于 2017-03-15 12:38:16
回答 3查看 42关注 0票数 0

我有这个输出所有宠物的工作代码,但是如何再次迭代它并只打印出户外的猫呢?在我的例子中,我只有一只户外猫作为第三个对象(在第三个参数中有false的对象)。

代码语言:javascript
运行
复制
import java.util.Arrays;

public class Driver {

public static void main(String[ ] args) {
    Pet[] pets = new Pet[4];

    pets[0] = new Dog("Spot", 5, "bulldog");
    pets[1] = new Cat("Lucky", 1, true);
    pets[2] = new Cat("Kitty", 8, false);
    pets[3] = new Dog("Bud", 9, "great dane");

    Arrays.sort(pets);

    for(int i = 0; i < pets.length; i++) {
        System.out.println(pets[i]);
        System.out.println();
    }

}   

}
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2017-03-15 12:49:41

根据其他答案,instanceof是确定对象类型的好方法。但您也问过如何只打印户外猫。你提到了第三个对象"Kitty“是室外的,这表明构造函数中的false是”室内“值。

检查每个元素的instanceof Cat。如果这是真的,则可以将其强制转换为Cat (您知道它不会失败,因为instanceof Cat返回true ),然后调用返回室内值的方法。这里我用了!操作员只打印不在室内的猫。

代码语言:javascript
运行
复制
    for(int i = 0; i < pets.length; i++) {
        if (pets[i] instanceof Cat) {
            Cat cat = (Cat) pets[i];
            if (!cat.getIndoorStatus()) {
                System.out.println("Outdoor cat: " + cat);
            }
        }                
    }
票数 0
EN

Stack Overflow用户

发布于 2017-03-15 12:42:22

您可以使用instanceOf运算符。

代码语言:javascript
运行
复制
for(int i = 0; i < pets.length; i++) {
    if (pets[i] instanceof Dog) {
        System.out.println(pets[i]);
        System.out.println();
    }
}
票数 0
EN

Stack Overflow用户

发布于 2017-03-15 12:45:34

代码语言:javascript
运行
复制
for(int i = 0; i < pets.length; i++) {
    if(pets[i] instanceof Cat){
        Cat cat = (Cat) pets[i];
        if(!cat.outdoor){
          // print pets[i] here
        }
     }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42801187

复制
相关文章

相似问题

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