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);