class Base {}
class Derived extends Base{}
public class FamilyVSExactly {
static void test(Object o ){
System.out.println("o.class "+ o.getClass());
System.out.println("o instanceOf Base "+ (o instanceof Base));
System.out.println("o instanceOf Derived " + (o instanceof Derived));//父类不属于子类的实例
System.out.println("Base isInstance o "+ Base.class.isInstance(o));
System.out.println("Derived isInstance o "+ Derived.class.isInstance(o));//父类和子类的Class不属于同一类型
//父类的Class和子类的Class不属于同一类型
System.out.println("Base.class == o.getClass "+(o.getClass()==Base.class));
System.out.println("Derived.class == o.getClass "+(o.getClass()==Derived.class));
//父类和子类的Class不属于同一类型
System.out.println("Base.class.equlas(o.getClass) "+Base.class.equals(o.getClass()));
System.out.println("Derived.class.equlas(o.getClass) "+Derived.class.equals(o.getClass()));
}
public static void main(String[] args) throws IllegalAccessException, InstantiationException {
//和子类去比较的时候都是false
// test(new Base());
test(new Derived());
}
}
同一类型实例的Class对象是同一个对象,从侧面说明了 Base的Class对象用于创建的实例,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);