读书人

有个程序的某个地方看不明白请大家帮

发布时间: 2012-03-15 11:50:38 作者: rapoo

有个程序的某个地方看不明白,请大家帮帮忙
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里除了基本类型以外都是引用,记这点就好啦

读书人网 >J2SE开发

热点推荐