java 面向对象 一问题 求解答 新手捉急

一代厨师 2015-04-24 10:34:19



第一个为什么是0啊 为什么不是30 30 40
...全文
136 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
RHZL 2015-04-25
  • 打赏
  • 举报
回复
没有啊,要先执行父类的构造方法的,但是父类调用了子类覆盖的pirnt()方法,所以等父类构造器执行完了才是子类的构造器,而且父类调用的的打印 i 值中,i是还没初始化的,因为i 是在子类中,但是
一代厨师 2015-04-25
  • 打赏
  • 举报
回复
引用 3 楼 zlhn55 的回复:
因为父类的构造器中绝不能调用被子类覆盖的方法,因为 是多态的特性,所以父类会调用子类覆盖的方法,而在你这个问题里,先执行父类构造器,构造器里执行子类的print()方法,但是子类的print()方法中j是还没有被赋值的,所以默认为0。希望能帮到你
那什么时候给J 赋值啊 不是一开始执行 int j=30 ;了么
RHZL 2015-04-25
  • 打赏
  • 举报
回复
因为父类的构造器中绝不能调用被子类覆盖的方法,因为 是多态的特性,所以父类会调用子类覆盖的方法,而在你这个问题里,先执行父类构造器,构造器里执行子类的print()方法,但是子类的print()方法中j是还没有被赋值的,所以默认为0。希望能帮到你
JSD1503 2015-04-24
  • 打赏
  • 举报
回复
默认值 是0
一代厨师 2015-04-24
  • 打赏
  • 举报
回复
public class Sub extends Super {// 子类Sub 继承父类Super public static void main(String[] args) { System.out.println(new Sub().j); } int j = 30; public Sub() { print(); j = 40; } void print() { System.out.println(j); } } class Super {// 父类 int i = 10; public Super() { print(); int i = 20; } void print() { System.out.println(i); } }

50,526

社区成员

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

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