码迷,mamicode.com
首页 > 其他好文 > 详细

黑马程序员_构造函数间的调用

时间:2014-07-07 22:45:30      阅读:276      评论:0      收藏:0      [点我收藏+]

标签:style   blog   java   color   使用   strong   

  这是我的第一篇博客,从这篇开始我将记录下学习java的心得体会,欢迎志同道合的朋友随时与我讨论,共同进步。

  我们都知道,函数间可以互相调用。构造函数是一种特殊的函数,它用来给对象进行初始化,如果想在构造构造函数中调用另一个构造函数,分为以下两种情况:

1.子类调用父类的构造函数

  先来看一段代码

 1 class Person
 2 {
 3     public Person()
 4     {
 5         // 构造语句
 6     }
 7 }
 8 
 9 class Student extends Person
10 {
11     public Student()
12     {
13         super();
14         // 其他构造语句
15     }
16 }

  这个例子很简单,类Student是类Person的子类,在类Student的构造函数中调用父类的构造函数直接写super()即可,要注意的是这一句必须放在构造函数的第一句。这是显式调用,如果不写的话,实例化子类时java虚拟机也会先调用父类的无参构造方法。稍复杂一点的情况是,若父类只定义了带参数的构造方法(此时父类中不会有默认的无参构造方法),则在子类构造方法中需手动调用父类的带参数的构造方法,否则编译出错,因为虚拟机默认先调用父类的无参构造方法。当然,也可在父类中添加一个无参构造方法来解决。

2.调用本类重载的构造函数

  一个类可能有多个构造函数,它们之间如何互相调用呢?下面还是看一段代码再说

 1  class Person
 2  {
 3      String name;
 4      int age;
 5 
 6      public Person() 
 7      {
 8          // 无参构造方法
 9      }
10 
11      public Person(String name) 
12      {
13          this.name = name;
14      }
15 
16      public Person(String name, int age) 
17      {
18          this(name);// 调用自身的构造方法,this代表对象
19          this.age = age;
20      }
21  }

  这里给类Person添加了两个成员变量,有三个构造方法,当我们写含有两个参数的构造方法时,可能会写成这样:

1 public Person(String name, int age) 
2 {
3     this.name = name;
4     this.age = age;
5 }

  这样写当然是正确的,但我们发现第一个语句已经在上一个构造方法中写过了,为了避免重复,我们打算在这个构造方法中调用定义好的含一个参数的构造方法。第一反应可能会写成这样:Person(name);这时编译会出现错误,一般函数调用可以直接用函数名(参数)的形式来调用,但构造函数不行,调用类中的构造函数只能用this语句来实现,这时this表示的是要进行初始化的对象,且此句也必须写在构造方法中的第一句。因为初始化要先执行。

  使用this语句进行类中构造函数的优点是可以提高代码的复用性,当不想对外提供过多的构造函数时,可以通过this语句将多个构造函数串连起来。

  如果有什么写的不好的地方欢迎大家批评指正!谢谢!

黑马程序员_构造函数间的调用,布布扣,bubuko.com

黑马程序员_构造函数间的调用

标签:style   blog   java   color   使用   strong   

原文地址:http://www.cnblogs.com/qwy-51/p/3812821.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!