菜鸟柳---对象初始化过程顺序分析(子父类)
2017-03-30 14:33
211 查看
class Fu
{
int num=9;
Fu()
{
}
class Zi extends Fu
{
int num=8;
{
System.out.println(“constructor code…”+num);
}
}
class Test
{
public static void main(String[] args)
{
new Zi ();
}
}
正如上边所写的,初始化过程是按着super-显示初始化-构造代码块初始化-构造函数初始化这样大体的过程。
上述例子中,过程如下:
定义子类对象new Zi,此时num默认初始化为0—-
找到Zi构造函数,第一行是隐藏的super();—–
到父类Fu,父类中同样有隐藏的super,指向Objecet,当然没什么影响—-
回到父类进行显示初始化num=9—-
构造代码块没有就进行父类的构造函数初始化即输出fu constructor run—
调用show(),因为子类中show方法对该方法进行了覆盖,就执行子类show,输出zi show…0(注意我就是在这蒙的,认为应该是num的值应该是9,后来才想到上边父类在int num=9时只是在栈内存中短暂出现并未改变对象中的num初始值,就算是父类那个时候接着调用,也是优先用栈内存中的num9,回到子类中,num=9就已经弹栈了)—-
然后是子类super结束后执行显示初始化num=8—-
构造代码块初始化输出constructor code…8—-
构造函数初始化输出zi constructor…8
最终输出的结果
fu constructor run
zi show…0
constructor code…8
zi constructor…8
{
int num=9;
Fu()
{
System.out.println("fu constructor run"); show(); } void show() { System.out.println(num); }
}
class Zi extends Fu
{
int num=8;
{
System.out.println(“constructor code…”+num);
}
Zi() { System.out.println("zi constructor..."+num); } void show() { System.out.println("zi show..."+num); }
}
class Test
{
public static void main(String[] args)
{
new Zi ();
}
}
正如上边所写的,初始化过程是按着super-显示初始化-构造代码块初始化-构造函数初始化这样大体的过程。
上述例子中,过程如下:
定义子类对象new Zi,此时num默认初始化为0—-
找到Zi构造函数,第一行是隐藏的super();—–
到父类Fu,父类中同样有隐藏的super,指向Objecet,当然没什么影响—-
回到父类进行显示初始化num=9—-
构造代码块没有就进行父类的构造函数初始化即输出fu constructor run—
调用show(),因为子类中show方法对该方法进行了覆盖,就执行子类show,输出zi show…0(注意我就是在这蒙的,认为应该是num的值应该是9,后来才想到上边父类在int num=9时只是在栈内存中短暂出现并未改变对象中的num初始值,就算是父类那个时候接着调用,也是优先用栈内存中的num9,回到子类中,num=9就已经弹栈了)—-
然后是子类super结束后执行显示初始化num=8—-
构造代码块初始化输出constructor code…8—-
构造函数初始化输出zi constructor…8
最终输出的结果
fu constructor run
zi show…0
constructor code…8
zi constructor…8
相关文章推荐
- 举例分析Java对象的初始化过程
- java学习笔记_类建立对象初始化过程分析
- 派生类对象初始化构造过程顺序
- 《Thinking in Java》——静态、非静态成员变量、子句的初始化顺序(含继承)及对象创建过程
- C++类对象创建过程(分配空间、赋值和初始化、对象初始化顺序、虚函数表指针)
- 面向对象第二个特征----继承III(子父类中构造函数初始化过程2)
- Java对象初始化过程例子分析(一)
- 派生类对象初始化构造过程顺序
- java对象创建过程及初始化顺序
- 对象创建过程/初始化顺序
- C# 对象初始化的顺序分析
- 对象创建过程/初始化顺序
- Java 类和对象的初始化过程及初始化顺序
- C++类对象创建过程(分配空间、赋值和初始化、对象初始化顺序、虚函数表指针)
- java对象创建过程/初始化顺序
- 对象创建过程/初始化顺序
- 对象初始化过程分析
- 面向对象第二个特征----继承III(子父类中构造函数初始化过程2)
- 对象创建过程,初始化顺序
- c#对象初始化顺序实例分析