标签: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语句将多个构造函数串连起来。
如果有什么写的不好的地方欢迎大家批评指正!谢谢!
标签:style blog java color 使用 strong
原文地址:http://www.cnblogs.com/qwy-51/p/3812821.html