我的问题是,如何或如果可能的话,了解编译器中对象的动态类型。
我有这个数据
public abstract class accommodation;
public class Hotel extends accomodation;
public class Cabin extends accomodation;
accomodation [] array= new accomodation[x];
我的实际问题是,可以从中获取仅包含酒店的阵列吗?
最佳答案
是的,有几种方法可以做到这一点。一种是使用getClass()
方法。因为这是在Object
类中定义的,所以可以在每个Java对象上调用它。
System.out.println(myObject.getClass());
甚至
if (myObject.getClass() == MyClass.class)
但是,如果您只想知道对象是否是特定类的实例,则可以编写
if (myObject instanceof MyType)
如果
true
的类是myObject
或其任何子类型,它将返回MyType
。您可以在此处为MyType
使用接口或类,甚至可以使用抽象类。但是,正如Tim在评论中指出的那样,通常有比依赖于检查对象类的方法之一更好的方法来设计程序。谨慎使用多态性可以减少对这两种情况的需求。