当java父类和子类都有构造函数时,求子类对象初始化过程详解
发布网友
发布时间:2022-05-10 12:57
我来回答
共2个回答
热心网友
时间:2023-10-09 20:31
你好,初始化过程是这样的:
1.首先,初始化父类中的静态成员变量和静态代码块,按照在程序中出现的顺序初始化;
2.然后,初始化子类中的静态成员变量和静态代码块,按照在程序中出现的顺序初始化;
3.其次,初始化父类的普通成员变量和代码块,在执行父类的构造方法;
4.最后,初始化子类的普通成员变量和代码块,在执行子类的构造方法;
最后,给你个例子吧。你运行着帮助理解。
class Super{
public static int a ;
private int b ;
static{
System.out.println("此时a的值为:" + a) ;
a = 10 ;
}
public Super(){
System.out.println("此时a的值为:" + a) ;
System.out.println("此时b的值为:" + b) ;
b = 20 ;
}
{
System.out.println("此时b的值为:" + b);
b = 30 ;
}
}
class Sub extends Super{
public static int aa ;
private int bb ;
static{
System.out.println("此时aa的值为:" + aa) ;
aa = 10 ;
}
public Sub(){
System.out.println("此时aa的值为:" + aa) ;
System.out.println("此时bb的值为:" + bb) ;
bb = 20 ;
}
{
System.out.println("此时bb的值为:" + bb);
bb = 30 ;
}
}
public class ConstructorTest {
public static void main(String[] args) {
new Sub() ;
}
}
热心网友
时间:2023-10-09 20:31
每次当用new关键字创建出一个子类对象时,那么程序会先执行父类中不带参数的构造函数,然后再执行子类的构造函数.
eg: 我建了三个类,一个是父类(A_constructor) , 第二个是子类(B_constructor) , 第三个是测试用的类(Test_constructor) . 代码及运行结果如下
父类:
public class A_constructor {
public A_constructor(){
System.out.println("父类的无参数的构造函数A_constructor()");
}
public A_constructor(int n){
System.out.println("父类带参数的构造函数A_constructor(n) : "+n);
}
}
子类:
public class B_constructor extends A_constructor{
public B_constructor(){
System.out.println("子类的无参数构造函数B_constructor()");
}
public B_constructor(int n){
System.out.println("子类带参数的构造函数B_constructor(n): "+n);
} }
测试类:
public class Test_constructor {
public static void main(String args[]){
B_constructor one = new B_constructor(); //不带参数
B_constructor two = new B_constructor(2); //带了参数
System.out.println("测试结束");
}
}
运行结果:
父类的无参数的构造函数A_constructor()
子类的无参数构造函数B_constructor()
父类的无参数的构造函数A_constructor()
子类带参数的构造函数B_constructor(n): 2
测试结束
参考资料:http://e.codepub.com/2010/0108/19524.php