1. class Base {}
    2. class Derived extends Base{}
    3. public class FamilyVSExactly {
    4. static void test(Object o ){
    5. System.out.println("o.class "+ o.getClass());
    6. System.out.println("o instanceOf Base "+ (o instanceof Base));
    7. System.out.println("o instanceOf Derived " + (o instanceof Derived));//父类不属于子类的实例
    8. System.out.println("Base isInstance o "+ Base.class.isInstance(o));
    9. System.out.println("Derived isInstance o "+ Derived.class.isInstance(o));//父类和子类的Class不属于同一类型
    10. //父类的Class和子类的Class不属于同一类型
    11. System.out.println("Base.class == o.getClass "+(o.getClass()==Base.class));
    12. System.out.println("Derived.class == o.getClass "+(o.getClass()==Derived.class));
    13. //父类和子类的Class不属于同一类型
    14. System.out.println("Base.class.equlas(o.getClass) "+Base.class.equals(o.getClass()));
    15. System.out.println("Derived.class.equlas(o.getClass) "+Derived.class.equals(o.getClass()));
    16. }
    17. public static void main(String[] args) throws IllegalAccessException, InstantiationException {
    18. //和子类去比较的时候都是false
    19. // test(new Base());
    20. test(new Derived());
    21. }
    22. }
    1. 同一类型实例的Class对象是同一个对象,从侧面说明了 BaseClass对象用于创建的实例,Base对象只有一个Class对象。即每一个对象只有一个Class对象
    //同一类型实例
    Base base = new Base();
    Base base2 = new Base();
    Base base3 = new Base();
    //是同一个对象
    System.out.println(base.getClass() == base2.getClass() );
    System.out.println(base.getClass() == base3.getClass());
    System.out.println(base2.getClass() == base3.getClass());
    
    //Base的Class对象用于创建的实例
    Base b1 = Base.class.newInstance();
    Base b2 = Base.class.newInstance();
    Base b3 = Base.class.newInstance();
    Base b4 = Base.class.newInstance();
    //Base对象只有一个Class对象
    System.out.println(b1.getClass() == b2.getClass());
    System.out.println(b1 == b2);