请各位,一定要帮我看看,这个问题发了好几天了也没人能说出个道理来...............
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变量,在不同的内存地址,互不影响。