java继承的问题

[复制链接]
查看11 | 回复5 | 2012-2-26 00:03:42 | 显示全部楼层 |阅读模式
三次调用了 print 函数,所以输出了3句话。那么,其次序如下:1). public Test001() 里面调用了第一次。2).public Qdb() 里面调用了第二次。3).public Qdb() 里面用 super.print(); 调用了第三次。解析如下:在main方法之中 new Qdb(); 的时候,因为有Qdb有父类,会先调用父类的无参构造方法。所以执行了上面的第一次输出。但是调用父类无参构造的时候,Qdb 类的 i 还未被赋值,所以会出现0的情况。具体解决思路:可以在 父类和子类的构造方法里面分别 System.out.println("调用 父/子 类构造方法"); 来查看其执行顺序。这个顺序是JVM定义的加载...
回复

使用道具 举报

千问 | 2012-2-26 00:03:42 | 显示全部楼层
创建子类对象的时候,都会调用父类无参构造器的,父类构造器调用print();该方法调用对是子类的print()方法;这个时候子类虽然加载,加载的时候只会在内存声明一个i变量,但还没有执行子类构造器,所以i=30这句赋值语句还不会执行,所以i在这个时候是没有值的,所以会给默认值,int型的默认值是0 ,所以输出了0;只有当你把子类的i定义成st...
回复

使用道具 举报

千问 | 2012-2-26 00:03:42 | 显示全部楼层
你构造方法还未执行完成就打印I的值,此时I在堆中只分配了空间默认为0,此时程序尚未执行int i =30;换句话说要先执行完构造函数才会执行int i =30.这个就是类初始化的知识点。...
回复

使用道具 举报

千问 | 2012-2-26 00:03:42 | 显示全部楼层
父类实例化也就是newTest001()执行的print()方法时 i还没有被赋值...
回复

使用道具 举报

千问 | 2012-2-26 00:03:42 | 显示全部楼层
int 默认的值是0...
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行