2 baidu 26783335 baidu_26783335 于 2017.12.07 21:16 提问

求解答案为什么输出是father

public class Test extends Father{
private String username="test";

public static void main(String[] args) {
    Test test =new Test();
    System.out.println(test.getUsername());
}

}

class Father{
private String username="father";

public String getUsername() {
    return username;
}

}

8个回答

lyy289065406
lyy289065406   2017.12.07 21:28

成员变量是不存在重载一说的,只有方法可以重载。

Father.username 定义为 private ,这是Father 自己的成员变量, 子类是取不到的
Test.username 是 Test 自己的成员变量, 跟 Father.username 是两个变量
然后 子类Test并没有覆写 Father 的getUsername方法
于是你的main函数调用的实际是Father的getUsername, 取的是Father.username的值,自然就是输出 "father"

lyy289065406
lyy289065406 回复baidu_26783335: 不是多线程环境,有无volatile毫无影响。这是继承的知识,不是线程的知识。
7 天之前 回复
baidu_26783335
baidu_26783335 刚刚看了看Test.class反编译之后文件,getUsername方法前加了一个volatile关键字
7 天之前 回复
baidu_26783335
baidu_26783335   2017.12.07 21:17

答案为什么是father

qq_31150381
qq_31150381   2017.12.07 21:17

所以问题是什么。。。

qq_37102332
qq_37102332   2017.12.07 23:11

你不是返回的username

qq877988484
qq877988484   2017.12.08 09:42

子类找不到 当然去父类中找

qq_40666161
qq_40666161   2017.12.08 10:26

就是都是私有的不能被覆盖 他运行时候先找你爹 然后才会找儿子 就和学生在学校犯错了肯定的找家长一样

qq_40666161
qq_40666161   2017.12.08 10:28

还可以这么理解 儿子有100块零花钱 父亲有100块私房钱 妈妈知道需要100块钱 爸爸肯定被榨干了

Amo_lt
Amo_lt   2017.12.08 17:28

因为你并没有给test中的username写get方法,就相当于你只是定义了一个和father里面同名的变量,但是你什么操作都没有做!就相当于你的test类中并没有getUserName()方法,你的类没有,当然就会去父类找啦!如果你想要输出test,只需要在你的test类的username的下面加上:

    private String username="test";

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