如果类B和类C扩展了类A,我有一个类型为B或C的对象,我如何确定它是哪种类型的实例?


当前回答

您可以使用getSimpleName()。

假设我们有一个对象:Dog d = new Dog(),

我们可以使用下面的语句来获取类名:Dog。例如:

.getSimpleName d.getClass () ();//返回String 'Dog'。

PS: d.g getclass()会给你对象的全名。

其他回答

任何建议的方法的使用都被认为是基于糟糕的OO设计的代码气味。

如果您的设计很好,您应该不会发现自己需要使用getClass()或instanceof。

任何建议的方法都可以,但只是在设计方面要记住一些东西。

您可以使用getSimpleName()。

假设我们有一个对象:Dog d = new Dog(),

我们可以使用下面的语句来获取类名:Dog。例如:

.getSimpleName d.getClass () ();//返回String 'Dog'。

PS: d.g getclass()会给你对象的全名。

在这种情况下我们可以使用反射

objectName.getClass().getName();

例子:-

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

    String name = request.getClass().getName();
}

在这种情况下,您将获得类的名称,该对象传递给HttpServletRequest接口引用变量。

使用Object.getClass。它返回对象的运行时类型。下面是如何使用你的例子来调用它:

class A {}
class B extends A {}
class C extends A {}

class Main {  
  public static void main(String args[]) { 
    C c = new C();
    Class clazz = c.getClass();
    System.out.println(clazz); 
  } 
}

输出:

class C

您还可以比较两个Class实例,以确定两个对象是否属于同一类型。

class A {}
class B extends A {}
class C extends A {}

class Main {  
  public static void main(String args[]) { 
    B b = new B();
    Class c1 = b.getClass();
    C c = new C();
    Class c2 = c.getClass();
    System.out.println(c1 == c2); 
  } 
}

在“Class”类上还有一个. isinstance方法。如果你通过myBanana. getclass()获得一个对象的类,你可以看到你的对象myApple是否与myBanana via是同一个类的实例

myBanana.getClass().isInstance(myApple)