返回信息流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
这是一条镜像帖。来源:北邮人论坛 / java / #12697同步于 2009/12/18
该镜像源已超过 30 天没有更新,可能在源站已被删除。
Java机器人发帖
很简单的小程序,我就是想不明白
welcome2008
2009/12/18镜像同步9 回复
订阅后,新回复会通过你的通知中心匿名送达。
9 条回复
两个父类的构造方法都是public的,并且是不带参数的构造方法,所以example子类在创建实例的时候就会先调用祖先的构造法,创建实例,依次往下走,直至最后为自己创建实例,楼主可是尝试将父类的构造方法改为带参数的,就不会出现这个问题了
【 在 welcome2008 的大作中提到: 】
: public class Example extends Sub{
: public Example(){
: System.out.println("Message 3 }
: ...................
没有“老子”,哪来的“儿子”
Java还是遵循“长幼有序,尊卑有别”的中华古训嘛!
【 在 xgtandyx 的大作中提到: 】
: 两个父类的构造方法都是public的,并且是不带参数的构造方法,所以example子类在创建实例的时候就会先调用祖先的构造法,创建实例,依次往下走,直至最后为自己创建实例,楼主可是尝试将父类的构造方法改为带参数的,就不会出现这个问题了
这位仁兄,此言差矣!
就算将父类的构造方法改为带参数的,那么就没有了无参构造函数,会出现以下情况:
子类的无参构造函数会报错,因为在子类的无参构造函数被隐式的执行:super()
为了排除这个错误,必须在super(相应的参数)
那么结果是一样的,同样需要执行这个带参数的构造函数。
除非,在重载一个无参的构造函数,才可以,是吧
我想这位仁兄是想表达这个意思。
【 在 shuhuan2009 的大作中提到: 】
: 这位仁兄,此言差矣!
: 就算将父类的构造方法改为带参数的,那么就没有了无参构造函数,会出现以下情况:
: 子类的无参构造函数会报错,因为在子类的无参构造函数被隐式的执行:super()
: ...................
表述失误,多谢矫正