OCJP之有继承关系时,对象的初始化顺序

来源:互联网 发布:java emf转png 编辑:程序博客网 时间:2024/05/16 12:20

直接看代码中的注释:


注意:

1) 静态全局变量,也就是成员变量的使用;

2) 有继承关系时,子类对象的初始化顺序

3)构造器中this指针的引用,在子类构造器中,如果用了this,它直指另外一个构造器,不会先调父类的构造器了,参考另外一篇文章

package com.ocjp.polymorphism;class GardenTool {static String s = "";String name = "Tool ";GardenTool(String arg) { this(); s += name; }GardenTool() { s += "gt "; }}public class InitSequence extends GardenTool {{ name = "Rake "; }InitSequence(String arg) { s += name; }public static void main(String[] args) {//直接调父类,跟子类没任何关系;new GardenTool("hey ");/*有继承关系的子类对象,初始化顺序为: * 1) 父类的静态块 * 2) 子类的静态块 * 3) 父类的构造块 * 4) 子类的构造块 * 5) 父类的构造方法 * 6) 子类的构造方法 * 本例中,static String s为全局静态变量,第二个对象使用的s已经被第一个对象改过了 */new InitSequence("hi ");System.out.println(s);}//此构造块完全覆盖了{ name = "Rake "; }{ name = "myRake "; }}

输出:


gt Tool gt myRake

原创粉丝点击