java子类和父类属性重复问题
伊谢尔伦
伊谢尔伦 2017-04-18 09:03:21
0
8
942

java 子类继承 父类, 但子类中 包含和父类相同 属性 ,给子类赋值之后,父类的相同的属性值还是空的。
类定义如下:

public class Person {

    private String name;
    private String age;

    // ignore getter and setter
}

public class Student extends Person {

    private String name;
    private String score;
    
    // ignore getter and setter
}

public static void main(String[] args){
    Student stu = new Student();
    stu.setAge("12");
    stu.setName("test");
}

debug看到


父类(Person)的name属性值是null,继承的方法是子类会覆盖掉父类相同的方法,但是这属性为什么没覆盖

伊谢尔伦
伊谢尔伦

小伙看你根骨奇佳,潜力无限,来学PHP伐。

全部回复(8)
巴扎黑

父类的属性被私有了,子类也重写了父类的方法,重写方法的时候也没去调用父类的方法,所以造成了父类属性值为空。

伊谢尔伦

都是private的啊!

巴扎黑

相同成员变量不会覆盖,http://blog.csdn.net/iwaich/article/details/9126661

黄舟

变量没有重写这一说

PHPzhong

雷雷

小葫芦

建议贴出setter方法体 如果使用了 super关键字 再讨论这个问题比较好

左手右手慢动作

可以在Student里编一个方法a(),在方法里用super调用Person类里方法,然后再在main方法里调用该a()方法,应该可行

大家讲道理

这个问题已经解决了。

我只是指出题主在题目描述中的一点不准确的地方:

父类(Person)的name属性值是null,继承的方法是子类会覆盖掉父类相同的方法,但是这属性为什么没覆盖。

其实,根据我的理解:“子类属性对父类同名属性的作用”与“子类方法对父类同名方法的作用”是相同的。

其实,所谓子类”覆盖了“父类同名方法,其实并没有真地覆盖,父类方法还在那里。只不过你在debug根据里看不到而已。

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板