class A
{
public void func1()
{
System.out.println("A func1 is calling");
}
public void func2()
{
func1();
}
}
class B extends A
{
public void func1()
{
System.out.println("B func1 is calling");
}
    public void func3()
    {
System.out.println("B func3 is calling");
}
}
class hello
{
public static void main(String [] args)
{
B b=new B();
A a = b;
callA(a);
callA(new A());
}
public static void callA(A a)
{
if (a instanceof B)
{
B b=(B)a;
b.func1();
b.func2();
b.func3();
}
else
a.func1();
a.func2();

}结果
B func1 is calling
B func1 is calling
B func3 is calling
B func1 is calling
A func1 is calling
A func1 is calling注意 程序里面是有callA(new A());
就是不知道第4行的B func1 is calling到底从那里来得?

解决方案 »

  1.   

    我觉得结果应该是
    B func1 is calling
    B func1 is calling
    B func3 is calling
    A func1 is calling
    A func1 is calling
      

  2.   

    因为A a = b;所以a instanceof B为true;所以a.func2();时,class A的func1被class B的func1重写...所以结果...
    B func1 is calling
    B func1 is calling
    B func3 is calling
    B func1 is calling
    A func1 is calling
    A func1 is calling
      

  3.   

    哦 3楼大哥好像写错了吧
    应该是  所以a.func1();时,class A的func1被class B的func1重写...
      

  4.   

    木有错.........a.func1()是a instanceof B为false时执行滴...
      

  5.   

    B b=new B();
    A a = b;
    callA(a);

    callA(new B());
    等价...这样还不明白?