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

Java 如何使用多态性对数组中的特定对象进行排序?,java,Java,我有一个输出所有宠物的工作代码,但如何再次迭代,只打印出户外猫?在我的例子中,我只有一只户外猫作为第三个对象(在第三个参数中为false的对象) 导入java.util.array; 公务舱司机{ 公共静态void main(字符串[]args){ 宠物[]宠物=新宠物[4]; 宠物[0]=新狗(“斑点”,5,“斗牛犬”); 宠物[1]=新猫(“幸运”,1,正确); 宠物[2]=新猫(“Kitty”,8,假); 宠物[3]=新狗(“巴德”,9,“大丹狗”); 数组。排序(pets); 对于(in

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

导入java.util.array;
公务舱司机{
公共静态void main(字符串[]args){
宠物[]宠物=新宠物[4];
宠物[0]=新狗(“斑点”,5,“斗牛犬”);
宠物[1]=新猫(“幸运”,1,正确);
宠物[2]=新猫(“Kitty”,8,假);
宠物[3]=新狗(“巴德”,9,“大丹狗”);
数组。排序(pets);
对于(int i=0;i
您可以使用instanceOf运算符

for(int i = 0; i < pets.length; i++) {
    if (pets[i] instanceof Dog) {
        System.out.println(pets[i]);
        System.out.println();
    }
}
for(int i=0;i
for(int i=0;i
根据其他答案,instanceof是确定对象类型的好方法。但你也问过如何只打印户外猫。您提到了第三个对象“Kitty”是outdoor,这表明构造函数中的false是“indoor”值

检查每个元件是否有Cat的实例。如果这是真的,可以将其转换为Cat(您知道它不会失败,因为Cat的instanceof返回了true),然后调用您的方法,该方法返回室内值。在这里,我用过了!仅打印cat的操作员不在室内

    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);
            }
        }                
    }
for(int i=0;i
是什么阻止你…为类似于你的第一个循环创建另一个
-循环?我实际上有一些getter和setter。这种方法应该取代它吗?我在问题中添加了这个类。是的,只需使用返回值的任何方法。getIntroductor()或您所称的任何名称。调用什么并不重要,只要它返回正确的值。它应该是
isIndoorStatus()
,而不是
getIndoorStatus()
。getter和setter的JavaBeans模式规定,返回
布尔值的getter的名称应以
is…
开头,仅用于记录:例如,相同的方法是名为isInDoor()的方法。然后:使用布尔值也不是一个理想的选择。
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
        }
     }
}
    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);
            }
        }                
    }