P245-
《Head First Java》20200927读书笔记
Duck的简易饲养方法
一定要有不需参数的构造函数。
如果Duck的构造函数需要一项参数会怎样?
上一页的Duck只有一个构造函数,且它需要一个int型的size参数。
想象一个你可以让用户在创建Duck时有两个选项:一个可以指定Duck的大小(通过构造函数的参数),另外一个使用默认值而无需指定大小。
你无法只依靠单一的构造函数就能够很清楚地达到这个目的。
要记得,如果某个方法或构造有一项参数,你就必须在调用该方法或构造函数的时候传入适当的参数。
你没有办法作出一种没给参数时,就使用默认值的方法,因为在这个情况下,没有给参数就无法通过编译程序。
public class Duck{
int size;
public Duck(int newSize){
if(newSize == 0){//如果参数值为0就使用默认的大小
size = 27;
}else{
size = newSize;
}
}
}
你需要两种方法来创建出新的Duck:
public class Duck2{
int size;
public Duck2(){
//指定默认值
size = 27;
}
public Duck2(int duckSize){
//使用参数设定
size = duckSize;
}
}
知道大小时:
Duck2 d = new Duck2(15);
不知道大小时:
Duck2 d2 = new Duck2();
因此这会需要两个构造函数来分辨两种选项。
一个需要参数,另外一个不需要参数。
如果一个类有一个以上的构造函数,这代表它们也是重载的。
重载与默认的构造函数
编译器一定会帮你写出没有参数的构造函数吗?
No!
如果你已经写了一个有参数的构造函数,并且你需要一个没有参数的构造函数,则你必须自己动手写!
如果类有一个以上的构造函数,则参数一定要不一样。
这就包括了参数的顺序与类型,只要是不一样就可以。
重载构造函数的意思代表你有一个以上的构造函数且参数都不相同
要点
- 实例变量是保存在所属的对象,位于堆上。
- 如果实例变量是个对对象的引用,则引用与对象都是在堆上。
- 构造函数是个会在新建对象的时候执行程序代码。
- 构造必须与类同名且没有返回类型。
- 你可以用构造函数来初始被创建对象的状态。
- 如果你没有写构造函数,编译器会帮你安排一个。
- 默认的构造函数是没有参数的。
- 如果你写了构造函数,则编译器就不会调用。