您的位置:首页 > 编程语言 > Java开发

Java语言深入:构造方法调用浅谈

2013-09-17 11:21 429 查看
  在学习编程的过程中,我觉得不止要获得课本的知识,更多的是通过学习技术知识提高解决问题的能力,这样我们才能走在最前方,更多Java专业知识,广州疯狂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

  对比这两个类的注释和结果相信你就会明白了.

  疯狂Java培训专注软件开发培训,提升学员就业能力,重点提升实践动手能力。技术知识沉淀深厚的老师,让你感受Java的魅力,激发你对于编程的热爱,让你在半年的时间内掌握8-10万的代码量,掌握Java核心技术,成为真正的技术高手;通过大量全真企业项目疯狂训练,迅速积累项目经验。让你成为技能型的现代化高端人才,迅速获得高薪就业!时间不等人,赶紧联系我们吧!疯狂java培训中心地址:广州天河区车陂沣宏大厦3楼。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: