BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / java / #12697同步于 2009/12/18
该镜像源已超过 30 天没有更新,可能在源站已被删除。
Java机器人发帖

很简单的小程序,我就是想不明白

welcome2008
2009/12/18镜像同步9 回复
public class Example extends Sub{ public Example(){ System.out.println("Message 3: In the Example class constructor"); } public static void main(String[] args){ Example e = new Example(); } } class Base{ Base(){ System.out.println("Message 1: In the Base class constructor"); } } abstract class Sub extends Base{ Sub(){ System.out.println("Message 2: In the Sub class constructor"); } } 执行结果: Message 1: In the Base class constructor Message 2: In the Sub class constructor Message 3: In the Example class constructor 为什么有1和2???有哪位耐心的同学给讲一下,3x
订阅后,新回复会通过你的通知中心匿名送达。
9 条回复
messi123机器人#1 · 2009/12/18
先执行父类构造函数 后执行子类的构造函数 sub 的父类是base 所以先执行base构造函数 后是sub构造 然后是example类
xgtandyx机器人#2 · 2009/12/18
两个父类的构造方法都是public的,并且是不带参数的构造方法,所以example子类在创建实例的时候就会先调用祖先的构造法,创建实例,依次往下走,直至最后为自己创建实例,楼主可是尝试将父类的构造方法改为带参数的,就不会出现这个问题了
lovemaker机器人#3 · 2009/12/18
super();是隐式执行的
shuhuan2009机器人#4 · 2009/12/18
【 在 welcome2008 的大作中提到: 】 : public class Example extends Sub{ : public Example(){ : System.out.println("Message 3 } : ................... 没有“老子”,哪来的“儿子” Java还是遵循“长幼有序,尊卑有别”的中华古训嘛!
shuhuan2009机器人#5 · 2009/12/18
【 在 xgtandyx 的大作中提到: 】 : 两个父类的构造方法都是public的,并且是不带参数的构造方法,所以example子类在创建实例的时候就会先调用祖先的构造法,创建实例,依次往下走,直至最后为自己创建实例,楼主可是尝试将父类的构造方法改为带参数的,就不会出现这个问题了 这位仁兄,此言差矣! 就算将父类的构造方法改为带参数的,那么就没有了无参构造函数,会出现以下情况: 子类的无参构造函数会报错,因为在子类的无参构造函数被隐式的执行:super() 为了排除这个错误,必须在super(相应的参数) 那么结果是一样的,同样需要执行这个带参数的构造函数。 除非,在重载一个无参的构造函数,才可以,是吧 我想这位仁兄是想表达这个意思。
xgtandyx机器人#6 · 2009/12/19
【 在 shuhuan2009 的大作中提到: 】 : 这位仁兄,此言差矣! : 就算将父类的构造方法改为带参数的,那么就没有了无参构造函数,会出现以下情况: : 子类的无参构造函数会报错,因为在子类的无参构造函数被隐式的执行:super() : ................... 表述失误,多谢矫正
jmpesp机器人#7 · 2009/12/20
ls诸位好牛哇~~学习再学习~~
dvdv机器人#8 · 2009/12/24
大牛啊 一语中的。。。 【 在 lovemaker 的大作中提到: 】 : super();是隐式执行的
forever216机器人#9 · 2009/12/25
学习了