子类构造方法的定义可以分为以下几种:
1、若父类没有显式定义构造方法,则子类可以定义也可以不定义构造方法,构造子类对象时会通过子类的构造方法来调用父类默认的构造方法。
2、若父类显式定义了无参数的构造方法,则子类可以定义也可以不定义构造方法,构造子类对象时会通过子类的构造方法调用父类定义的无参数的构造方法。
3、若父类仅定义了带参数的构造方法,则子类必须定义构造方法,并且必须在子类构造方法的第一行显式地(通过super)调用超类的构造方法,
尤其是当超类重载构 造方法时,必须为super()提供合适的参数。
如果在子类构造方法中没有通过super显式地调用超类构造方法,这时并不是不调用超类的构造方法,而是隐式地调用超类无参数的构造方法。在这种情况下,
若果超 类没有无参数的构造方法,则将导致编译错误。
例如:
//定义父类Person类
class Person{
public String name;
protected int age;
static int IDnumber;
boolean sex;
private String IDcard;
//定义带参数构造方法
Person(String name)
{
this.name=name;
System.out.println("创建了一个Person对象");
}
public void setIDcard(String s){IDcard=s;}
public String getIDcard(){return IDcard;}
void eat(){
System.out.println(name+"今年"+age+"岁"+"喜欢吃中餐");
}
//定义静态方法
public static void getnumber(){
IDnumber=IDnumber+1;
System.out.println("调用Person类的方法,已经创建了"+IDnumber+"个Person对象");
}
}
//定义子类
class Student extends Person
{
Student(String name) {
super(name);
System.out.println("创建了一个Student对象");
// TODO Auto-generated constructor stub
}
public String name;
static int IDnumber;
private String IDcard;
//定义实例方法
public void setIDcard(String s){IDcard=s;}
public String getIDcard(){return IDcard;}
//定义静态方法
public static void getnumber()
{
IDnumber=IDnumber+1;
System.out.println("调用Student类的方法,已经创建了"+IDnumber+"个Student对象");
}
}