Java 这个对象是哪个扩展类?

Java 这个对象是哪个扩展类?,java,object,types,Java,Object,Types,假设我有一个User对象数组,其中每个对象实际上是扩展User的两个类中的一个ComputerUser和HumanUser都扩展了User 假设我在列表中迭代,当我使用它时,每个对象都被命名为o 我可以通过如下比较来确定o是ComputerUser还是HumanUser: if(o.getClass().equals(ComputerUser.class)) {} else if(o.getClass().equals(HumanUser.class)) {} 等 etc您可以使用instan

假设我有一个
User
对象数组,其中每个对象实际上是扩展
User
的两个类中的一个
ComputerUser
HumanUser
都扩展了
User

假设我在列表中迭代,当我使用它时,每个对象都被命名为
o

我可以通过如下比较来确定
o
ComputerUser
还是
HumanUser

if(o.getClass().equals(ComputerUser.class)) {}
else if(o.getClass().equals(HumanUser.class)) {}


etc

您可以使用instanceof运算符:

if (o instanceof ComputerUser) { 
    ...
}
尽管这被认为是面向对象编程的拙劣使用。另一种方法是利用多态性并定义适合ComputerUser与HumanUser的行为:

abstract class User {

   abstract public void work();

}

class ComputerUser extends User { 

    @Override
    public void work() { 
       ...
       //specific to ComputerUser
    }

}

class HumanUser extends User { 

    @Override
    public void work() { 
       ...
       //specific to HumanUser
    }

}

您可以使用instanceof运算符:

if (o instanceof ComputerUser) { 
    ...
}
尽管这被认为是面向对象编程的拙劣使用。另一种方法是利用多态性并定义适合ComputerUser与HumanUser的行为:

abstract class User {

   abstract public void work();

}

class ComputerUser extends User { 

    @Override
    public void work() { 
       ...
       //specific to ComputerUser
    }

}

class HumanUser extends User { 

    @Override
    public void work() { 
       ...
       //specific to HumanUser
    }

}

你自己测试不是更容易吗?在我检查之前,代码中的其他错误,我想可能有人会一目了然。你自己测试不是更容易吗?在我检查之前,代码中的其他错误,我想可能有人会一目了然。即使它保存在
用户
的数组中?它不会认为它是
用户
?检查对象动态类型的实例,而不是引用它的变量的静态类型。即使它保存在
用户
的数组中?它不会认为它是检查对象动态类型的
用户
?实例,而不是引用它的变量的静态类型。