为什么子类输出z是8,不应该是11吗

weixin_44723453 2019-09-08 12:42:52
package Temp; class A { int x = 6; private int y = 2; public A(int a) { x = a; } int getz() { int z; z = x / y; return z; } void show() { System.out.println("x=" + x); System.out.println("y=" + y); System.out.println("z=" + getz()); } } class B extends A { int x = 3, y = 5, z; public B(int a) { super(a); } int getz() { z = x + y; return z; } } public class Temp { public static void main(String[] args) { A num1 = new A(10); B num2 = new B(9); num1.show(); num2.show(); } } 结果: x=10 y=2 z=5 x=9 y=2 z=8
...全文
167 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
weixin_42649358 2019-09-09
  • 打赏
  • 举报
回复
引用楼上的话,就是num2.show()输出的x,y实际上是调用了父类的方法和私有,值而子类B重写了getz()方法,所以调用getz()方法时调用的是子类的参数值和重写的方法。
qybao 2019-09-09
  • 打赏
  • 举报
回复
首先show方法在父类,是看不到子类的x和y的,所以打印的必然是父类的x和y
而getz方法在子类重写了,所以子类的属性优先使用(除非在子类没有该属性而父类有或者用super特指父类的属性),所以打印的是子类x和y运算的结果
LuckyGuyy 2019-09-08
  • 打赏
  • 举报
回复
我能问一下第二个y为什么是2么
oh_Maxy 2019-09-08
  • 打赏
  • 举报
回复
父类方法里出现的属性调用,只会调用父类的属性,父类方法不会调用子类的属性。
LuckyGuyy 2019-09-08
  • 打赏
  • 举报
回复
如果这么算的话,那z的8该怎么理解啊
weixin_44723453 2019-09-08
  • 打赏
  • 举报
回复
那为什么输出的是x=9,y=2 是不是创建了一个父类对象一个子类对象,当引用子类对象时,如果子类重写了方法getz,那么就调用子类对象中的x,y如果没写getz,就调用父类对象中的getz和x,y。 感觉好模糊
舞者H 2019-09-08
  • 打赏
  • 举报
回复
引用 1 楼 LuckyGuyy的回复:
我能问一下第二个y为什么是2么
父类的y私有了,子类的没法重写。所以show方法,打印的仍然是父类的y
世代农民 2019-09-08
  • 打赏
  • 举报
回复
重写了get方法,编译夫类的get方法运行的是子类的get方法,子类中x为5y为3,不懂回复
世代农民 2019-09-08
  • 打赏
  • 举报
回复
3+5等于8

58,454

社区成员

发帖
与我相关
我的任务
社区描述
Java Eclipse
社区管理员
  • Eclipse
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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