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
您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,感谢您对有问必答的支持与关注!