代码如下:class A
{
public void fun1()
{
   System.out.println("A-->public void fun1(){}");
}
    public void fun2()
{
   this.fun1();
}
}
class B extends A
{
public void fun1()
{
   System.out.println("B-->public void fun1(){}");
}
public void fun3()
{
   System.out.println("B-->public void fun2(){}");
}
}
class C extends A
{
public void fun1()
{
   System.out.println("C-->public void fun1(){}");
}
public void fun4()
{
   System.out.println("C-->public void fun4(){}");
}
}
public class JavaDemo44
{
public static void main(String args[])
{
   print(new B());
}
public static void print(A a)
{
   a.fun2();
   if (a instanceof B)
   {
   B b=(B) a;
   b.fun3();
   }
   if (a instanceof C)
   {
   C c=(C) a;
   c.fun4();
   }
}
}其中小弟不明白的是-->main方法中的print传入参数为B类的一个实例,但是怎么就能判断a就是B类的实例呢之前也没有A a =new B()啊,难道程序运行到a.fun2()自动默认了?小弟是菜鸟,各位大侠请赐教啊!!