类继承时构造方法的使用
程序员文章站
2022-05-14 12:01:44
...
第一 所有的类都有构造方法
1如果程序员没有给类显式的定义构造方法,则系统默认为该类定义一个默认的无参构造方法。
2如果程序员定义的类中有若干有参构造方法,则系统不再为该类定义无参构造方法。
第二 子类不能继承父类的构造方法
第三 子类在创建时,必须默认、直接或间接的调用父类的构造方法,以使父类内容先于子类创建和初始化
1如果父类未定义任何构造方法(系统会定义一个默认的无参构造方法)或者定义的构造方法中有一个是无参构造方法,则对子类构造方法没有影响。因为创建子类时会默认调用父类的无参构造方法。
例如:
public class ExtendsTest {
public static void main(String[] args) {
new Child1();
new Child2();
}
}
//父类中没有构造方法
class Parent{
String name;
public void setName(String name){
this.name = name;
}
public void print(){
System.out.println("name=="+name);
}
}
class Child1 extends Parent{
Child1(){
//子类默认调用父类的无参构造方法
}
}
class Child2 extends Parent{
Child2(){
super();//子类显示调用父类的构造方法
}
}
2如果父类定义有若干有参构造方法,但没有定义无参构造方法则,子类构造方法中必须使用“super(参数)”的形式,直接调用父类构造方法;或者,在子类构造方法中调用“this(参数)”的形式间接调用父类构造方法。
例如:
public class ExtendsTest {
public static void main(String[] args) {
new Child();
new Child("李四");
}
}
//父类中没有无参构造方法,只有若干有参构造方法
class Parent{
Parent(String name){
}
Parent(String name,int age){
}
}
class Child extends Parent{
//构造方法1
Child(String name){
// super();这是错误的,因为父类没有无参构造方法
super(name,30);//直接调用父类的有参构造方法
}
//构造方法2
Child(){
this("张三");//间接调用父类的构造方法,因为“构造方法1”中有对父类构造方法的调用
}
}
注意:this(参数)或者super(参数),这两个对构造方法的调用语句必须放在构造方法中,而且是第一句。
上一篇: 使用apache模块rewrite_module (转)
下一篇: 谈谈PHP的输入输出流