java 继承体系对象的构造过程

  1. 先说一下普通对象的构造过程
比如下面
public class Hello{
    int i=0;
    public static void main(String[] argv){
        Hello obj1=new Hello();
    }
}

(1)初始化Objec的静态变量,然后调用Objec的静态初始化块
(2)初始化Hello的静态变量,然后调用Hello的静态初始化块
(3)初始化Object的实例变量,和实例代码。
(4)调用Object的无参构造函数
(5)初始化Hello的实例变量,和实例代码。
(6)调用Hello的无参构造函数

具有显性继承的对象
public class Fther{

}

public class Son extends Father{
    public static void main(String[] argv){
        new Son();
    }
}

(1)初始化父类Father的静态变量,然后调用父类Father的静态初始化块
(2)初始化子类Son的静态变量,然后调用子类Son的静态初始化块
(3)初始化父类Fahter的实例变量,和实例代码。
(4)调用父类Father的无参构造函数
(5)初始化子类Son的实例变量,和实例代码。
(6)调用子类Son的无参构造函数

但是我这里强调一些规则。
对于子类,如果没有构造函数,则会调用默认的无参构造函数,默认的无参构造函数会调用父类的无参构造函数如果父类没有构造函数,则会调用默认无参构造函数,如果父类没有提供无参构造函数,则编译不会通过,提示需要给父类提供无参构造函数

对于子类,如果有构造函数,构造函数中并没有声明调用父类的构造函数,则会调用父类的无参构造函数,其余同上。
如果子类显示的调用了父类的有参构造函数,则不会调用父类的无参构造函数

public class Father{
    public Father(int n){
        System.out.println("父类有参构造函数");
    }
}
public class Son extends Father{
        public static void main(String[] argv){
        new Son();
    }
}

这里写图片描述

public class Father{
    public Father(){
        System.out.println("父类无参构造函数");
    }
    public Father(int n){
        System.out.println("父类有参构造函数");
    }
}
public class Son extends Father{
    public static void main(String[] argv){
        new Son();
    }
}

这里写图片描述

public class Father{
    public Father(){
        System.out.println("父类无参构造函数");
    }
    public Father(int n){
        System.out.println("父类有参构造函数");
    }
}
public class Son extends Father{
    public Son(){

    }
    public static void main(String[] argv){
        new Son();
    }
}

这里写图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值