关于JAVA中成员变量的隐藏问题,请问如何解决?

class A {
    int m;
    int getM(){
        return m;
    }
    int seeM(){
        return m;
    }
}
class B extends A{
    int m;
    int getM(){
        return m+100;
    }
}
public class exercise {
    public static void main(String[] args){
        B b = new B();
        b.m = 20;
        System.out.println(b.getM());
        A a = new A();
        a.m = -100;
        System.out.println(a.getM());
        System.out.println(b.seeM());
        System.out.println(b.getM());
        System.out.println(a.seeM());
    }
}

我的疑问是:
为什么上面中输出b.seeM()的值为0
不应该是seeM()继承下来,然后操作被隐藏的变量
也就是说我不明白为什么b.seeM()的值不为-100
不是java中子类继承的方法可以操作隐藏的成员变量吗?
多谢指点

删除类B中的成员变量m才能继承,修改后的代码如下:

class A {
    int m;
    int getM(){
        return m;
    }
    int seeM(){
        return m;
    }
}
class B extends A{
    int getM(){
        return m+100;
    }
}
public class exercise {
    public static void main(String[] args){
        B b = new B();
        b.m = 20;
        System.out.println(b.getM());
        A a = new A();
        a.m = -100;
        System.out.println(a.getM());
        System.out.println(b.seeM());
        System.out.println(b.getM());
        System.out.println(a.seeM());
    }
}

子类中也定义了变量m,覆盖了继承的变量m。
去掉自定义的变量m,再看看打印结果。


class A {
    int m;
    int getM(){
        return m;
    }
    int seeM(){
        return m;
    }
}
class B extends A{
    int getM(){
        return m+100;
    }
}
public class exercise {
    public static void main(String[] args){
        B b = new B();
        b.m = 20;
        System.out.println(b.getM());
        A a = new A();
        a.m = -100;
        System.out.println(a.getM());
        System.out.println(b.seeM());
        System.out.println(b.getM());
        System.out.println(a.seeM());
    }
}

class B extends A,在B中又重新声明了一个成员变量m,也就是说,B中有两个成员变量m,一个是继承自类A的,一个是自己独有的。b.m = 20;这里是给独有的m赋值,在seeM函数中,显示的是从A中继承的m

您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,感谢您对有问必答的支持与关注!
PS:问答VIP年卡 【限时加赠:IT技术图书免费领】,了解详情>>> https://vip.csdn.net/askvip?utm_source=1146287632