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