一、构造函数的一项关键特征是它会在对象能够被赋值给引用之前就执行。
而构造函数和方法的不同在于构造函数没有返回类型,且方法名一定与类名相同。
package tydu;
class Duck{
public Duck(){
System.out.print("ga ga ga");
}
}
public class gouzao {
public static void main(String[] args) {
// TODO Auto-generated method stub
Duck d=new Duck();
}
}
输出:
ga ga ga
二、使用构造函数来初始化Duck的状态。
最好的方法是把初始化的程序代码放在构造函数中,然后把构造函数设定成需要参数的。
代码如下:
package tydu;
class Duck{
int size;
public Duck(int setsize){
System.out.println("ga ga ga");
size=setsize;
System.out.print("size is "+ size);
}
}
public class gouzao {
public static void main(String[] args) {
// TODO Auto-generated method stub
Duck d=new Duck(3);
}
}
重载构造函数就是代表你又一个以上的构造函数并且参数都不相同。
如果两个构造参数类型都是一样的则无法通过编译,如:
class Duck{
int size;
public Duck(int setsize){
System.out.println("ga ga ga");
size=setsize;
System.out.print("size is "+ size);
}
public Duck(int n) {
}
}
编译器看得是参数的类型和顺序,而不是参数的名字,如:
package tydu;
class Duck{
int size;
public Duck(int setsize){
System.out.println("ga ga ga");
size=setsize;
System.out.print("size is "+ size);
}
public Duck(boolean setsize) {
}
}
public class gouzao {
public static void main(String[] args) {
// TODO Auto-generated method stub
Duck d=new Duck(3);
}
}
我们也可以做出相同类型但是顺序不同的参数。如:
package tydu;
class Duck{
int size;
public Duck(int setsize ,boolean n){
System.out.println("ga ga ga");
size=setsize;
System.out.print("size is "+ size);
}
public Duck(boolean n,int setsize) {
}
}
public class gouzao {
public static void main(String[] args) {
// TODO Auto-generated method stub
Duck d=new Duck(3,true);
}
}
package dds;
abstract class vnimal{
private String name;
//fog会继承这个getter
public String getName() {
return name;
}
public vnimal(String setname) {
name=setname;
}
}
class fog extends vnimal{
//这个构造函数会要求名称
public fog(String name) {
//传递Animal的构造函数,通过super()来引用父类
super(name);
}
}
public class aannimal {
public static void main(String[] args) {
// TODO Auto-generated method stub
fog d=new fog("momo");
System.out.print(d.getName());
}
}