请教:Java子类和父类中有相同的成员变量,为什么输出的结果不符合预期

菠萝科技 2016-09-08 07:03:02

public class TestA {
int n=0;
int m=0;
}
public class TestB extends TestA {
int n=0;
}
public class E {
TestA testA;
public void Out(TestA testA){
System.out.println("n:"+testA.n);
System.out.println("m:"+testA.m);
}

}
public class TestE extends E {

public static void main(String[] args) {
TestE e= new TestE();
TestB testB =new TestB();
testB.m =128;
testB.n =128;
e.Out(testB);
}
}
输出结果
n:0
m:128
为什么m的值为128而不是0?
原帖:http://bbs.csdn.net/topics/391892994?page=1#post-401564567
...全文
524 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
菠萝科技 2016-09-11
  • 打赏
  • 举报
回复
引用 6 楼 wabiaozia 的回复:
[quote=引用 4 楼 wabiaozia 的回复:] 看了这个就懂了 http://blog.csdn.net/javaoverflow
当用父类的引用操作子类时即:TestA testB =new TestB();这时testB的mn的值与父类保持一致。多态时引用变量的属性和子类还是父类保持一致?看到网上老毕解释的简单易懂:成员变量,静态方法看左边;非静态方法:编译看左边,运行看右边。”意思是:当父类变量引用子类对象时(Fu f = new Zi();),在这个引用变量f指向的对象中,他的成员变量和静态方法与父类是一致的,他的非静态方法,在编译时是与父类一致的,运行时却与子类一致(发生了复写)。[/quote] 链接给错了: http://blog.csdn.net/wabiaozia/article/details/52488686
菠萝科技 2016-09-10
  • 打赏
  • 举报
回复
引用 4 楼 wabiaozia 的回复:
看了这个就懂了 http://blog.csdn.net/javaoverflow
当用父类的引用操作子类时即:TestA testB =new TestB();这时testB的mn的值与父类保持一致。多态时引用变量的属性和子类还是父类保持一致?看到网上老毕解释的简单易懂:成员变量,静态方法看左边;非静态方法:编译看左边,运行看右边。”意思是:当父类变量引用子类对象时(Fu f = new Zi();),在这个引用变量f指向的对象中,他的成员变量和静态方法与父类是一致的,他的非静态方法,在编译时是与父类一致的,运行时却与子类一致(发生了复写)。
YXTS122 2016-09-10
  • 打赏
  • 举报
回复
wuiiao 2016-09-09
  • 打赏
  • 举报
回复
因为testB中没有m成员,m是继承testA的,testB的成员m在初始化的时候,是给其继承的组件A的成员m赋值,而且方法中是输出a组件中的m和n,因为b有成员n,所以a组件的成员n没有被初始化,使用的默认值。
菠萝科技 2016-09-09
  • 打赏
  • 举报
回复
看了这个就懂了 http://blog.csdn.net/javaoverflow
  • 打赏
  • 举报
回复
JAVA中成员变量是早期绑定,在编译的时候就已经确定绑定的是哪个类中的属性,先看本类中有没有该属性,没有在看父类中子类可以访问到的属性,如果有则引用该变量
EIkoEnua 2016-09-08
  • 打赏
  • 举报
回复
我觉得 testB.m =128; 其实对父类的m属性进行赋值 而testB.n =128; 是对子类的n属性进行赋值 后面的 e.Out(testB); 则把testB向上转型为TestA 所以会丢失testB的属性,所以之前对n变成0 而m没变,还是128。

50,530

社区成员

发帖
与我相关
我的任务
社区描述
Java相关技术讨论
javaspring bootspring cloud 技术论坛(原bbs)
社区管理员
  • Java相关社区
  • 小虚竹
  • 谙忆
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧