首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > J2SE开发 >

请各位,一定要帮小弟我看看,这个有关问题发了好几天了也没人能说出个道理来.

2012-02-05 
请各位,一定要帮我看看,这个问题发了好几天了也没人能说出个道理来...............classA{Stringname 张

请各位,一定要帮我看看,这个问题发了好几天了也没人能说出个道理来...............
class   A
{
String   name= "张三 ";
void   qq(A   a)
{
System.out.println(a.name);
}
public   static   void   main(String   args[])
{
A   a=new   A();
B   b=new   B();
a.qq(b);
}
}
class   B   extends   A
{
String   name= "李四 ";
}
请问一下,上面的程序为什么会输出张三啊?我是这么想的:B类继承了A类,并覆盖了A类的成员变量
name,a.qq(b)传递过去的是B类的实例,应当输出李四啊?

[解决办法]
b虽然是B的实例,但使用a.name的时候,因为a是用A来引用的,Java会使用A类自己声明的实例变量name,因为父类对子类的内部是一无所知的。
还有就是访问一个对象的变量,这个没有覆盖不覆盖的说法,父类和子类都有一个name变量,在不同的内存地址,互不影响。

热点排行