2012-03-12 7 views
1

同じサブクラスの親コンストラクタと別のコンストラクタの両方を呼び出す必要があります。これは許可されていますか?また、this()にはいくつかの制限があることを理解しています(最初に配置する必要があります)super()?同じコンストラクターで両方の呼び出しを行うことはできますか?super()とthis()を同じコンストラクタに表示できますか?

+0

あなたがそれをしようと検討していましたか? – EJP

+0

私はそれを試しましたが、その背後にあるルールを理解したかったのです。私は、私が試したことで幸運にならないことを確かめたいと思っていました。同様のことも同様に働くでしょう。さまざまな組み合わせを試みることから、全体像を見分けるのが難しい場合もあります。私は悪い質問をするつもりはありませんでした。 – rubixibuc

答えて

3

同じクラスでは、はい。

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

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

同じコンストラクタでは、 superまたはthisは、コンストラクタ内の最初のものでなければなりません。 superが最初の場合は、thisを最初にすることはできません。 thisが最初の場合は、superを最初にすることはできません。 同じコンストラクタ内に共存できません。

1

this()で別のコンストラクタを呼び出し、このコンストラクタでsuper()を呼び出します。

0
// Call constructor overload in this class (below) 
public Foo(){ 
    this("Some stuff"); 
} 

// Call constructor overload in superclass. 
public Foo(String stuff){ 
    super(stuff) 
} 
+1

質問に答えません。 – EJP

+0

それ以外はそうです。どのように実行できるかを示すコード例。 –

+1

それは説明に非常に短いです。 [emory](http://stackoverflow.com/a/9660478/377270)と[hunter](http://stackoverflow.com/a/9660529/377270)はどちらも優れた答えを書く方法のガイダンスを提供しています。 – sarnold

1

ただ、一つだけのコンストラクタの中で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; 
    } 
} 
関連する問題