有个程序的某个地方看不明白,请大家帮帮忙
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 C
{
public static void main(String [] args)
{
B b = new B();
callA(b);
A a = b; //请问这句是不是将对象b的值赋给了对象a,可是为什麽结果的最后两句却还是A func1 is calling
callA(new A());
}
public static void callA(A a)
{
if(a instanceof B)
{
B b = (B)a;
b.func1();
b.func2();
b.func3();
}
a.func1();
a.func2();
}
}
最后的结果是
B func1 is calling
B func1 is calling
B func3 is calling
B func1 is calling
B func1 is calling
A func1 is calling
A func1 is calling
------解决方案--------------------A a = b;
public static void callA(A a)
一个是参数a,一个是变量,不要混了,
callA(new A());
这里你new 一个A类的实例 它与B类当然不兼容
也就是说a instanceof B等于false
------解决方案--------------------关键在这。。。callA(new A());
这里面是从新生成的一个A对象。和你上面的赋值没有任何的关系
所以后面输出的就是2个A的
------解决方案--------------------callA(new A());
你这里传了个A的类
if(a instanceof B)
条件不符合,不就执行a.func1();
a.func2();
A func1 is calling
------解决方案--------------------JAVA里除了基本类型以外都是引用,记这点就好啦