Могут ли super () и this () появляться в одном конструкторе? - PullRequest
1 голос
/ 12 марта 2012

Я хочу вызвать родительский конструктор и другой конструктор в одном и том же подклассе. Это разрешено? Кроме того, я понимаю, что this() имеет некоторые ограничения (необходимо поместить в первую очередь), super()? Могу ли я сделать вызов для обоих в одном конструкторе?

Ответы [ 4 ]

3 голосов
/ 12 марта 2012

В том же классе, да.

class Stuff extends Object
{
      Stuff ( )
      {
            super ( ) ;
      }

      Stuff ( int x )
      {
            this ( ) ;
      }
}

В том же конструкторе, нет.super или this должно быть первым в конструкторе.Если super первый, то this не может быть первым.Если this первый, то super не может быть первым.Они не могут сосуществовать в одном конструкторе.

1 голос
/ 12 марта 2012

Просто вызовите super() только в одном из конструкторов:

public class Foo extends Bar 
{
   private int y;

   public Foo(int x)
   {
      this(x, 0);
   }

   public Foo(int x, int y)
   {
      super(x);
      this.y = y;
   }
}

public class Bar
{
   private int x;

   public Bar(int x)
   {
      this.x = x;
   }
}
1 голос
/ 12 марта 2012

Вы называете свой другой конструктор с помощью this(), а в этом конструкторе вы называете super().

0 голосов
/ 12 марта 2012
// Call constructor overload in this class (below)
public Foo(){
   this("Some stuff");
}

// Call constructor overload in superclass.
public Foo(String stuff){
   super(stuff)
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...