作了一个小程序,实现继承功能。对构造函数,方法的执行顺序有点疑惑。程序如下,
class BaseClass{
public BaseClass(){
System.out.println("Now in BaseClass()");
init();
}
public void init(){
System.out.println("Now in BaseClass.init()");
}
} public class SuberClass extends BaseClass{
public SuberClass() {
super.init();
System.out.println("Now in SuberClass()");
}
public void init() {
System.out.println("Now in SuberClass.init()");
}
public static void main(String[] args) {
System.out.println("创建BaseClass对象:");
new BaseClass();
System.out.println("创建SuberClass对象:");
new SuberClass();
}
}
打印结果是:创建BaseClass对象:
Now in BaseClass()
Now in BaseClass.init()
创建SuberClass对象:
Now in BaseClass()
Now in SuberClass.init()
Now in BaseClass.init()
Now in SuberClass()
继承后调用super后,是否先执行父类的构造函数,然后是子类的构造函数,然后再是父类的方法,其次是自类的方法啊.
class BaseClass{
public BaseClass(){
System.out.println("Now in BaseClass()");
init();
}
public void init(){
System.out.println("Now in BaseClass.init()");
}
} public class SuberClass extends BaseClass{
public SuberClass() {
super.init();
System.out.println("Now in SuberClass()");
}
public void init() {
System.out.println("Now in SuberClass.init()");
}
public static void main(String[] args) {
System.out.println("创建BaseClass对象:");
new BaseClass();
System.out.println("创建SuberClass对象:");
new SuberClass();
}
}
打印结果是:创建BaseClass对象:
Now in BaseClass()
Now in BaseClass.init()
创建SuberClass对象:
Now in BaseClass()
Now in SuberClass.init()
Now in BaseClass.init()
Now in SuberClass()
继承后调用super后,是否先执行父类的构造函数,然后是子类的构造函数,然后再是父类的方法,其次是自类的方法啊.
解决方案 »
- java中,子类可以继承父类的所有的非private的,非静态的成员,那么父类的构造方法可以被继承吗?
- javaSE小程序
- 关于移位运算符
- 急!SequenceInputStream读取时报“该流已关闭”,大家帮忙啊!
- 文件输入输出流
- 2006-12-01到2008-06-20杂遍历之间的日期??????(送高分)
- js问题--在线等
- .java是否还有用???
- Applet中的网页无法显示中文,怎么解决?
- 初学JAVA问题多多.高手来帮忙.
- 小弟,遇到了java.lang.NullPointerException,帮忙看看问题出在哪里,送分100,急,在线等.....
- classCastException问题,在线等啊!
1.显示或隐示的调用super()
2.显示的调用this()
3.初始化类变量
4.执行构造体
这个是一个递归的过程
1、 System.out.println("创建BaseClass对象:");
2、new BaseClass();
(1)System.out.println("Now in BaseClass()");
(2)init();
(3)System.out.println("Now in BaseClass.init()");
3、System.out.println("创建SuberClass对象:");
4、new SuberClass();
(1)先执行父类的构造函数
(2)在父类的构造函数里的init方法要使用覆盖,调用子类的init方法
(3)执行子类的构造函数
(4)调用super即父类的init方法
(5)System.out.println("Now in SuberClass()");
5、结束。
呵呵。好象应该是这样的。没有调试