Java中构造方法的调用

初始化的顺序为:

  先初始化父类的静态代码--->初始化子类的静态代码-->创建实例(如果不创建实例,则后面的不执行)初始化父类的非静态代码--->初始化父类构造函数--->初始化子类非静态代码--->初始化子类构造函数

  子类继承父类会先初始化父类,调用父类的构造函数,子类的构造方法的第一条语句就是调用父类的没有参数的构造方法,如果你没有写出这条语句java虚拟机就会默认的调用,如果你显示的写了这条语句,就一定要写在构造方法中的第一条语句,不然会报错。

  原理简述:只有在构造方法中调用了父类的构造方法才能继承父类的相关属性和方法,要不然子类从哪里继承父类的属性和方法,在实例化子类的时候又没有和父类有任何关系。

  子类的构造函数默认调用和这个构造函数参数一致的父类构造函数,除非在此子类构造函数的第一行显式调用父类的某个构造函数。

  类Example1:

  class father{

  int x=0,y=0;

  father(){

  System.out.println("now is in father's constructor");

  }

  father(int x,int y){

  this.x=x;

  this.y=y;

  }

  public void print(){

  System.out.println("x="+x+";y="+y);

  }

  }

  class son extends father{

  son(){

  System.out.println("now is in son's constructor");

  }

  son(int x,int y){

  super(x,y);//改变x,y,的值,若无super(x,y),则默认调用father()

  }

  public void print(){

  super.print();

  System.out.println("my name is son!");

  }

  }

  public class Example1 {

  public static void main (String[] args){

  son s=new son();//实例化构造的时候从父类开始调用

  s.print();//此处不是构造,是调用

  son f=new son(10,20);

  f.print();

  }

  }

  运行结果:

  now is in father's constructor

  now is in son's constructor

  x=0;y=0

  my name is son!

  x=10;y=20

  my name is son!

  类Example2:

  class father{

  int x=0,y=0;

  father(){

  System.out.println("now is in father's constructor");

  }

  father(int x,int y){

  this.x=x;

  this.y=y;

  }

  public void print(){

  System.out.println("x="+x+";y="+y);

  }

  }

  class son extends father{

  son(){

  System.out.println("now is in son's constructor");

  }

  son(int x,int y){

  //改变x,y,的值

  System.out.println("s213");

  }

  public void print(){

  //引用父类的print函数

  System.out.println("my name is son!");

  }

  }

  public class Example2 {

  public static void main (String[] args){

  son s=new son();//实例化构造的时候从父类开始调用

  s.print();//此处不是构造,是调用, oh,yeah!

  son f=new son(10,20);//先调用父类的father(){System.out.println("now is in }

  //而不是father(int x,int y){this.x=x;this.y=y;}

  f.print();

  }

  }

  运行结果

  now is in father's constructor

  now is in son's constructor

  my name is son!

  now is in father's constructor

  s213

  对比这两个类的注释和结果相信你就会明白了。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值