如果子类构造函数调用的参数结构与它的超类构造函数不匹配会发生什么

时间:2014-06-05 10:46:40

标签: java inheritance constructor super

  1. 如果你有一个子类,而你的子类只有构造函数是super(int x, int y)但是那个参数结构与它的任何超类构造函数的参数结构都不匹配,那么会发生什么呢?子类如何调用它的超类构造函数?

  2. 在这种情况下使用super()的默认构造函数吗?

    1. 如果没有调用this()super()作为子类的第一行,是否仅使用默认构造函数?

2 个答案:

答案 0 :(得分:2)

  1. 你必须直接调用你喜欢的super contructor,除了super有一个没有参数的“可见”构造函数。
  2. 仅当它是可访问的(公共的或受保护的)且没有其他构造函数与其签名匹配时。
  3. <强>样品:


    父构造函数:

    public Parent();
    public Parent(int x, int y);
    

    儿童构造者:

    public Child() {
       // invokes by default super() if there is no other super call.
    }
    
    public Child(int x, int y) {
       // invokes by default super() if there is no other super call.
    }
    

    但是如果您将父构造函数定义为私有

    父构造函数:

    private Parent();
    public Parent(int x, int y);
    

    儿童构造者:

    public Child() {
       // does not compile due there is no "visible" super().
    }
    
    public Child(int x, int y) {
       // does not compile due there is no "visible" super().
    }
    

    您需要直接调用超级构造函数

    public Child() {
       super(1,2);
    }
    
    public Child(int x, int y) {
       super(x,y);
    }
    

答案 1 :(得分:1)

以下列模式从SubClass构造函数中调用SuperClass构造函数。

1 &gt; SuperClass没有默认构造函数,这意味着SuperClass有一个带参数的构造函数。例如

SuperClass(int a){
     //somethin
}

您必须从子类构造函数显式调用超类构造函数,否则您的程序将无法编译。恩。

Subclass(){
      super(10);
}

2 &gt; SuperClass有一个默认的构造函数,可以不定义任何构造函数或定义默认构造函数。在这种情况下,您不需要从子类1调用超级构造函数,但是如果您想调用它,则可以。

 Subclass(){
     super();
  }

请记住,您只能从任何构造函数调用另一个构造函数。 离。

SubClass(){
   super();
   this(10);//this will not compile either you can call this or super
}