2 qq 34316891 qq_34316891 于 2016.03.17 11:06 提问

Java中关于字父类的问题,求好心人帮助

Zi类继承Fu类,结果应该输出6不应该是7啊,求大神解答。
class Fu{
int x=7;
int y=2;
public void a(){
System.out.println(this.x);
}
}
class Zi extends Fu{
int x=6;
}
public class a122 {
public static void main(String[] args){
Zi zi=new Zi();
zi.a();
}
}

6个回答

wojiushiwo945you
wojiushiwo945you   Ds   Rxr 2016.03.17 11:32
已采纳

这个很好理解,因为你的方法a是从父类继承过来的,最终调用的是父类的方法,虽然你的子类与父类有同名的成员变量x,但是本质上子类是有两个x的,一个指向自己的x,另一个执行父类的x,然后调用a方法时,由于a是父类的方法,所以在父类方法中访问的变量是父类的值。
如果你要输出7,就要重新a方法,输出子类自己的成员变量x。

 class Zi extends Fu{
    int x = 6;
    public void a() {
        System.out.println(this.x);
    }
}

子类和父类有相同的成员变量时,输出到底是谁的取决于调用的是谁的方法。如果子类重写了a()那么输出的就是子类的x。

wojiushiwo945you
wojiushiwo945you 回复qq_34316891: 那你给我采纳了呗!我好积累c币,换本书看看。
接近 2 年之前 回复
qq_34316891
qq_34316891 谢谢你哈!好人一生平安,嘿嘿。
接近 2 年之前 回复
wojiushiwo945you
wojiushiwo945you 回复qq_34316891: 运行时new操作,有继承关系的两个类是这样的,最终new出来的子类的对象的内部会有一个父类对象,各自有自己的属性,各自的方法中操作的this指向各自的对象的。这个a方法最终是父类的方法,所以this也是父类对象的。
接近 2 年之前 回复
wojiushiwo945you
wojiushiwo945you 回复qq_34316891: 这个this是在父类方法中,是指父类的对象的啊。
接近 2 年之前 回复
qq_34316891
qq_34316891 public void a(){ System.out.println(this.x); }这个方法中不是有一个this关键字吗,应该谁调用a方法就应该输出谁的x,那我是子类调用的应该输出子类的x,就是6啊,如果没有int x=6这条一句,才会输出7啊,
接近 2 年之前 回复
wojiushiwo945you
wojiushiwo945you   Ds   Rxr 2016.03.17 11:12

首先,你贴图根本看不清楚。直接把代码贴出来,不要贴图。

qq_34316891
qq_34316891   2016.03.17 11:16

class Fu{
int x=7;
int y=2;
public void a(){
System.out.println(this.x);
}
}
class Zi extends Fu{
int x=6;
}
public class a122 {
public static void main(String[] args){
Zi zi=new Zi();
zi.a();
}
}

qq_34316891
qq_34316891   2016.03.17 11:21

求大神解答,很想弄懂为什么不对,谢谢了。

qq_34316891
qq_34316891   2016.03.17 11:28

我认为结果应该输出是6,Zi类里面重写了X,所以zi对象去调用a方法的时候,返回的应该是zi的X,也就是6,然而输出的是7,我就不明白了。

wojiushiwo945you
wojiushiwo945you 你这个不是重写,只是又定义了一个与父类同名的成员变量,本质上这个子类对象会有两个x的变量空间的。要看是谁的方法,输出谁的成员变量。
接近 2 年之前 回复
qq_34316891
qq_34316891   2016.03.17 11:44

public void a(){
System.out.println(this.x);
}这个方法中不是有一个this关键字吗,应该谁调用a方法就应该输出谁的x,那我是子类调用的应该输出子类的x,就是6啊,如果没有int x=6这条一句,才会输出7啊,

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!