2016-08-19 11 views
-1

私はコンストラクタで 'this'キーワードを練習しています。私は 'this'が明示的にコンストラクタを呼び出すのに役立つことを知りに来た。しかし、リアルタイムでその使用は何ですか。明示的なコンストラクタ呼び出しの使用

明示的なコンストラクタの呼び出し。

class JBT { 

    JBT() { 
     this("JBT"); 
     System.out.println("Inside Constructor without parameter"); 
    } 

    JBT(String str) { 
     System.out 
       .println("Inside Constructor with String parameter as " + str); 
    } 

    public static void main(String[] args) { 
     JBT obj = new JBT(); 
    } 
} 
+5

'しかし、どのような本当のtime.'での使用があなたがあなたが実際にここで知りたいのか、何を明らかにする可能性が理解しようとしていますか? – SomeJavaGuy

答えて

-1

出力は次のようになります

Inside Constructor with String parameter as JBT 
Inside Constructor without parameter 

this("JBT")現在のインスタンス/オブジェクトへの参照を返すthisString引数

0

とコンストラクタを呼び出すため。

さて、あなたは、あなたがsuperキーワードを使用することができます 基底クラスやスーパークラスからのコンストラクタを呼び出したい場合は、同じクラスの別の コンストラクタから1つのコンストラクタを呼び出すために、このキーワードを使用することができます。他のコンストラクタから コンストラクタを呼び出すことは、Javaでコンストラクタチェーンと呼ばれます。

例:

public class ChainingDemo { 
    //default constructor of the class 
    public ChainingDemo(){ 
     System.out.println("Default constructor"); 
    } 
    public ChainingDemo(String str){ 
     this(); 
     System.out.println("Parametrized constructor with single param"); 
    } 
    public ChainingDemo(String str, int num){ 
     //It will call the constructor with String argument 
     this("Hello"); 
     System.out.println("Parametrized constructor with double args"); 
    } 
    public ChainingDemo(int num1, int num2, int num3){ 
    // It will call the constructor with (String, integer) arguments 
     this("Hello", 2); 
     System.out.println("Parametrized constructor with three args"); 
    } 
    public static void main(String args[]){ 
     //Creating an object using Constructor with 3 int arguments 
     ChainingDemo obj = new ChainingDemo(5,5,15); 
    } 
} 

出力:実際の生活の中で

Default constructor 
Parametrized constructor with single param 
Parametrized constructor with double args 
Parametrized constructor with three args 
1

、あなたは主に(あなたの例で行ったように)なるようにデフォルト値を設定するためにそれを使用しますユーザーのクラッセのインターフェースを単純化することができます。

非常に多くの場合、これは、クラスが時間の経過とともに進化し、いくつかの新しい機能を追加する場合にも必要です。このことを考えてみましょう:

// First version of "Test" class 
public class Test { 
    public Test(String someParam) { 
     ... 
    } 
} 

// use of the class 
Test t = new Test("Hello World"); // all is fine 

、後日、あなたは、このようにあなたにコンストラクタを変更し、テストにクールな新しい切り替え機能を追加したい:、

public Test(String someParam, boolean useCoolNewFeature) 

元のクライアントコードをしますもはやコンパイルされません。が悪いです。

あなたはさらに古いconstructureの署名を供給する場合は、すべての罰金となります。

public Test(String someParam) { 
    this(someParam, false); // cool new feature defaults to "off" 
} 
関連する問題