class A{
int z=3;
void map(){

}
}
class B extends A{
int z=4;
void map(){
System.out.println("z="+this.z);
}
}
public class text{
public static void main(String args[]){
A a=new B();
a.map();
}
} 结果为z=4
而这个代码
class A{
int z=3;
void map(){

}
}
class B extends A{
int z=4;
void map(A x){
System.out.println("z="+x.z);
}
}
public class text{
public static void main(String args[]){
B a=new B();
a.map(a);
}
} 这个代码中x接受了对象a所以x.z为a.z按道理值是4的啊,可是却是3啊!?

解决方案 »

  1.   

    第一个程序中,this关键字调用本类中的z  ,结果是4  没问题。
    、第二个 还是刚刚那个问题,map(A x),x是A的对象,x.z当然是A类中的z变量了啊。还是那句话,属性没有覆写``````a.z = 3    ,    b.z = 4 ;
      

  2.   

    this.是使用本类的函数~~而你在类B中的map方法所传递的参数是类A的对象~~显示的时候< System.out.println("z="+x.z);> 所以是类A的z~所以输出的是3  如果你在类B的map方法是 void(B x)的话 输出的应该就是4了
      

  3.   

    传参数的时候把B类对象传给了A类对象,所以访问的是A类的实例域
      

  4.   


    楼上均正确,this.z调用的是本类中的z,第二种情况,map方法中,参数x是A的对象,x.z就是A类中的z变量如果你在第一种情况下的main方法中,加一句
     
       System.out.println(a.z);你会发现这一句输出的是3,因为a声明的类型是A
      

  5.   

    楼主你这个问题没有明白吗? 前一个程序你调用了THIS 关键字,"z="+this.z; 其输出的结果当然为本类的属性值咯,而后一个程序
    void map(A x){  //A  形参X 你已指明了类型 输出的结果当然是父类中的属性值咯
            System.out.println("z="+x.z);  //x.z = 父类中指定的值是  达内   的 顶下  O(∩_∩)O哈哈~