构造器被调用应遵循的程序:
1、在其它任何事物发生之前,将分配给对象的存储空间初始化为二进制的零。
2、调用基类构造器。该步骤不断递归,首先是构造这种层次结构的根,然后是下一层导出类,直到最低层的导出类。
3、按声明顺序调用成员的初始化方法。
4、调用导出类构造器的主体。
一例如下:
class aa{
aa(){
System.out.println("显示aa()");
}
}
class bb{
bb(){
System.out.println("显示bb()");
}
}
class cc{
cc(){
System.out.println("显示cc()");
}
}
class aa1 extends aa{
aa1(){
System.out.println("显示aa1()");
}
}
class aa12 extends aa1{
aa12(){
System.out.println("显示aa12()");
}
}
public class Sandwich extends aa12{
private bb b = new bb();
private cc c = new cc();
Sandwich(){
System.out.println("显示Sandwich()");
}
public static void main(String[] args) {
// TODO 自动生成方法存根
new Sandwich();
}
}
运行结果:
显示aa()
显示aa1()
显示aa12()
显示bb()
显示cc()
显示Sandwich()
通过继承和组合创建的新类本可以不担心其清理,一旦要手工清理,则因继承的缘故,出现作为垃圾回收一部分的特殊清理动作,就必须在导出类中覆盖dispose() 方法。对于对象和字段,销毁的顺序应该和初始化顺序相反。对于基类,首先对其导出类进行清一,然后才是基类。
1、在其它任何事物发生之前,将分配给对象的存储空间初始化为二进制的零。
2、调用基类构造器。该步骤不断递归,首先是构造这种层次结构的根,然后是下一层导出类,直到最低层的导出类。
3、按声明顺序调用成员的初始化方法。
4、调用导出类构造器的主体。
一例如下:
class aa{
aa(){
System.out.println("显示aa()");
}
}
class bb{
bb(){
System.out.println("显示bb()");
}
}
class cc{
cc(){
System.out.println("显示cc()");
}
}
class aa1 extends aa{
aa1(){
System.out.println("显示aa1()");
}
}
class aa12 extends aa1{
aa12(){
System.out.println("显示aa12()");
}
}
public class Sandwich extends aa12{
private bb b = new bb();
private cc c = new cc();
Sandwich(){
System.out.println("显示Sandwich()");
}
public static void main(String[] args) {
// TODO 自动生成方法存根
new Sandwich();
}
}
运行结果:
显示aa()
显示aa1()
显示aa12()
显示bb()
显示cc()
显示Sandwich()
通过继承和组合创建的新类本可以不担心其清理,一旦要手工清理,则因继承的缘故,出现作为垃圾回收一部分的特殊清理动作,就必须在导出类中覆盖dispose() 方法。对于对象和字段,销毁的顺序应该和初始化顺序相反。对于基类,首先对其导出类进行清一,然后才是基类。