`

父类构造方法调用

    博客分类:
  • Java
阅读更多
1.所有类如果没有构造函数,Java都会提供默认的无参构造函数,该函数什么都不做。
public class Test{
    public static void main(String args[]){
        Test t = new Test();//默认的无参构造函数
    }
}

运行结果:
2.如果类提供了构造函数,无论是否有参,Java都不会提供默认的无参构造函数。
public class Test{
    public Test(){System.out.println("无参构造函数");}//(1)无参构造函数
    public Test(int x){System.out.println("有参构造函数");}//有参构造函数
    public static void main(String args[]){
        Test t = new Test();//(1)如果被注释,这行语句就会出错
         Test t2 = new Test(2);
    }
}

运行结果:
无参构造函数
有参构造函数

注意:如果类仅仅提供了有参的构造函数,那么调用无参构造函数就会出错,无法编译。

3.子类构造函数会默认调用父类的无参构造函数
class Base{
    public Base(){System.out.println("父类无参构造函数");} 
    public Base(int x){System.out.println("父类有参构造函数");}
}
public class Test extends Base{
   public Test(){System.out.println("子类无参构造函数");}    
   //public Test(){super();System.out.println("子类无参构造函数");}    
    public Test(int x){System.out.println("子类有参构造函数");}
    public static void main(String args[]){
        Test t = new Test();//(1)
         Test t2 = new Test(2);//(2)
    }
}

运行结果:
父类无参构造函数
子类无参构造函数
父类无参构造函数
子类有参构造函数

(1)和(2)都会调用Base();
注意:如果父类仅仅提供了有参的构造函数,那么子类的构造函数就会出错。

4.子类使用super()关键字可以指定调用父类哪个构造函数
class Base{  
    public Base(int x){System.out.println("父类有参构造函数");}
}
public class Test extends Base{
   public Test(){super(2);System.out.println("子类无参构造函数");}
    public Test(int x){super(x);System.out.println("子类有参构造函数");}
    public static void main(String args[]){
        Test t = new Test();//(1)
         Test t2 = new Test(2);//(2)
    }
}

运行结果:
父类有参构造函数
子类无参构造函数
父类有参构造函数
子类有参构造函数

(1)和(2)都会调用父类的有参构造函数。
注意:super()语句必须是构造函数的第一条语句。
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics