为了账号安全,请及时绑定邮箱和手机立即绑定

求助,关于Java关键字super相关例题疑问?例句如下

求助,关于Java关键字super相关例题疑问?例句如下

倚天杖 2021-05-17 16:10:24
class A{int x,y;A(){x=100;y=200;}A(int x,int y){this.x=x;this.y=y;}}class B extends A{int z;B(int x,int y){super(x,y);z=300;}B(){z=800;}public void f(){System.out.printf("x=%d,y=%d,z=%d\n",x,y,z);}}class Example{public static void main(String arg[]){B b1=new B(10,20);b1.f();B b2=new B();b2.f();}}输出结果是x=10,y=20,z=300x=100,y=200,z=800第二组结果没有问题 想问下第一组结果为什么z的数值是300,我的理解是在第一次调用b1.f()的时候并没有经过z=300的语句 而是直接调用与第二组相同的z值 不知道哪里理解有误 请高手解答下 谢谢..
查看完整描述

2 回答

?
30秒到达战场

TA贡献1828条经验 获得超6个赞

B(int x,int y)
{
super(x,y);
z=300;
}
你这个构造方法已经对z进行初始化了啊

查看完整回答
反对 回复 2021-05-23
?
守着星空守着你

TA贡献1799条经验 获得超8个赞

这两种new构建的对象实例是不同的,是采用不同的构造函数new出来的。

1、B b1=new B(10,20);这个是使用B(int x,int y)这个有参数的构造函数来构建对象实例b1,而B(int x,int y)这个构造函数又调用父类的有参数的构造函数A(int x,int y)(因为super(x,y);)并令z=300。

2、B b2=new B();这个是使用B()这个无参数的构造函数来构建对象实例b2,这个无参数构造函数初始化z=800。

查看完整回答
反对 回复 2021-05-23
  • 2 回答
  • 0 关注
  • 275 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信