java如何判断对象是否属于属于某一个实例

    技术2022-07-10  121

    子类和父类之间如何判断子类的对象赋给父类引用的变量,是否属于子类的实例

    父类

    public class Animal { public String age; public void run(){ System.out.println("这是Animal的run方法..."); } public void sleep(){ System.out.println("这是Animal的sleep方法..."); } }

    子类

    public class Person extends Animal { public String name; public void run(){ System.out.println("这是Person类的run方法..."); } } /** * 测试对象类是否属于人类 */ public class Instance { public static void main(String[] args) { Animal animal=new Person(); if (animal instanceof Person) { Person person = (Person) animal; System.out.println("正确"); } } }

    子类的对象赋给父类的引用可以通过instance方法判断是否属于某个实例 注意:子类的子类如果判断属于父类的实例,是正确的;代码如下

    public class SuperMan extends Person{ }

    测试结果如下:

    public class Instance { public static void main(String[] args) { Animal animal=new SuperMan(); if (animal instanceof Person) { Person person = (Person) animal; System.out.println("正确"); } } }

    答案仍是正确的。子类的子类的对象赋给父类的引用,则子类的子类数属于子类的实例的。 如果想要精确的匹配某个类的是否属于指定类的实例,代码如下:

    public class Instance { public static void main(String[] args) { Animal animal=new SuperMan(); Class<? extends Animal> aClass = animal.getClass(); System.out.println(aClass);//class com.pfx.instance.Person 获取引用对象的Class对象 String name = aClass.getName(); System.out.println(name);//com.pfx.instance.Person 当前对象的全路径类名 System.out.println(SuperMan.class.getName()); if (name.equals(SuperMan.class.getName())){ System.out.println("对象是SuperMan的实例"); }else { System.out.println("对象不是SuperMan的实例"); } } }

    答案如下: class com.pfx.instance.SuperMan com.pfx.instance.SuperMan com.pfx.instance.SuperMan 对象是SuperMan的实例

    Animal animal=new SuperMan();替换为 Animal animal=new Person();

    答案如下:

    class com.pfx.instance.Person com.pfx.instance.Person com.pfx.instance.SuperMan 对象不是SuperMan的实例

    结果证明需要精确的判断某个引用对象是具体类的实例,需要使用第二种方式。

    Processed: 0.015, SQL: 9