Java——继承中构造器、实例域初始化顺序
2018-02-25 10:08
561 查看
一:我们使用继承特性扩展父类创建子类,并创建子类对象时,是否真会先调用父类构造器,再调用子类构造器呢?
通过IDEA来实验一下:
首先创建一个A类,并写上构造方法:
package com.zixue.chapter5;
public class A {
public A(){
System.out.println("A构造方法执行");
}
}再创建B类,继承A类,并写上构造方法:
package com.zixue.chapter5;
public class B extends A{
public B() {
System.out.println("B构造方法执行");
}
}然后在一个类的主函数里面创建B类对象再执行:
package com.zixue.chapter5;
public class Test {
public static void main(String[] args) {
B b = new B();
}
}输出结果:
A构造方法执行
B构造方法执行
结论:创建子类对象时,先调用父类构造方法,再调用子类构造方法,然后创建子类这个对象。
关于调用父类构造方法是否创建了父类对象,请移步至知乎参考大家的回答
https://www.zhihu.com/question/51920553?sort=created
二:如果A里面增加了属性(如age),创建A对象时是先执行属性初始化还是构造方法呢?
package com.zixue.chapter5;
public class A {
public int age = 10;
public A(){
age = 20;
System.out.println("A构造方法执行");
}
public static void main(String[] args) {
A a = new A();
System.out.println(a.age);
}
}输出结果:
A构造方法执行
20
结论:先执行初始化对象中属性,再执行构造方法中初始化。
通过IDEA来实验一下:
首先创建一个A类,并写上构造方法:
package com.zixue.chapter5;
public class A {
public A(){
System.out.println("A构造方法执行");
}
}再创建B类,继承A类,并写上构造方法:
package com.zixue.chapter5;
public class B extends A{
public B() {
System.out.println("B构造方法执行");
}
}然后在一个类的主函数里面创建B类对象再执行:
package com.zixue.chapter5;
public class Test {
public static void main(String[] args) {
B b = new B();
}
}输出结果:
A构造方法执行
B构造方法执行
结论:创建子类对象时,先调用父类构造方法,再调用子类构造方法,然后创建子类这个对象。
关于调用父类构造方法是否创建了父类对象,请移步至知乎参考大家的回答
https://www.zhihu.com/question/51920553?sort=created
二:如果A里面增加了属性(如age),创建A对象时是先执行属性初始化还是构造方法呢?
package com.zixue.chapter5;
public class A {
public int age = 10;
public A(){
age = 20;
System.out.println("A构造方法执行");
}
public static void main(String[] args) {
A a = new A();
System.out.println(a.age);
}
}输出结果:
A构造方法执行
20
结论:先执行初始化对象中属性,再执行构造方法中初始化。
相关文章推荐
- Java初始化顺序,静态变量,static块,实例变量,构造器的初始化顺序
- 【深入理解JVM】:Java类继承关系中的初始化顺序
- Java类的初始化顺序 (静态变量、静态初始化块、变量、初始化块、构造器)
- Java中静态变量、块、非静态变量、块和构造器的初始化顺序
- java中类与继承类内初始化顺序的测试
- java 类的继承,实例化一个类时 构造方法的调用顺序
- Java初始化顺序(静态变量、静态初始化块、实例变量、实例初始化块、构造方法)
- java继承时初始化的执行顺序
- 【转】Java类的初始化顺序 (静态变量、静态初始化块、变量、初始化块、构造器)
- Java第11次作业:什么是继承?继承的好处?什么是覆写?super()?构造代码块?子父类初始化顺序? 抽象类能用final声明吗?final关键字声明类 方法 变量以及全局常量?抽象类的构造方法?
- Java继承中父类与子类的初始化顺序
- Java 类的实例变量初始化的过程 静态块、非静态块、构造函数的加载顺序
- 深入java (类)深入理解类的继承和初始化顺序
- java继承 初始化顺序
- Java继承和初始化顺序
- java 父类访问子类对象的实例变量 继承过程中的执行顺序
- java中静态语句块、实例代码块、构造器方法这3者的调用顺序
- java中成员初始化与构造器初始化的顺序
- java实例变量初始化各语句执行顺序
- 实例解析Java中的构造器初始化