class classtest 
{
    public static void main(String[] args) 
    {
        //boolean b = true;
        boolean b = false;
        class1 c;
        if(b){
            c = new class1();
        }
        else{
            c = (class2)new class2();
        }
        if(c instanceof class1){
            System.out.println("class1");
            System.out.println(c.getClass().getName());
        }
        else if(c instanceof class2){
            System.out.println("class2");
            System.out.println(c.getClass().getName());
        }
        else
            System.out.println("neither of them");
    }
}class class1
{
    public class1(){
       System.out.println("I am class1");
    }
};class class2 extends class1
{
    public class2(){
       System.out.println("I am class2");
    }
};---------- output ----------
I am class1
I am class2
class1
class2为什么instanceof 的结果和class.getName()不一样?

解决方案 »

  1.   

    不一样:
    instanceof是指是否属于某一个类而class.getName() 是要得到对象所属的类名
      

  2.   

    1.class2 是class1的子类。
      所以:
      c instanceof class1和c instanceof class2的值都是true。
      即子类的实例一定是其父类的一个实例!!!
    2.c = (class2)new class2();不管c的声明如何,但它是一个子类的实例化。
      而这句话确实是创建了一个子类。在创建的过程中它会调用父类的构造方法。所以有
      “I am class1”这一句打印出。但实例的类名肯定是子类的名字喽。
      

  3.   

    那么就是说,如果我有两个方法定义:
    1. method(class1)
    2. method(class2)dan当c= new class2()
    method(c);实际调用的是2了?