@634

thisとsuper その2

Advertisement

自クラスのコンストラクタ呼び出し

自分のクラスのコンストラクタがオーバーロードされている場合、コンストラクタから他のコンストラクタを呼ぶことができる。そのときにthisをつかう。
public class CoTest{
    public static void main(String args[]){
    	Test t1 = new Test(10);
        t1.resultOutput();
    }
}

class Test{
    int num;

    public Test(){
        num = 0;
    }

    public Test(int n){
        this();
        num += n;
    }

    public void resultOutput(){
        System.out.println(num);
    }
}
結果
10
コンストラクタ呼び出しの特徴
  • コンストラクタを呼び出せるのはオブジェクト生成時(new)、コンストラクタから呼び出す、のどちらか。
  • コンストラクタからコンストラクタを呼び出す場合、呼び出しをコンストラクタの1行目に書かなくてはならない。
    →よって、呼び出せるのは1つのみ。
ちょっと実験。
public class CoTest{
    public static void main(String args[]){
    	Test t1 = new Test(10);
        t1.resultOutput();
    }
}

class Test{
    int num;

    public Test(){
        num = 0;
    }

    public Test(int n){
        num += n;  //コンストラクタ呼び出し前に
        this();    //処理を記述
    }

    public void resultOutput(){
        System.out.println(num);
    }
}
結果
coTest.java:17: this の呼び出しはコンストラクタの
                               先頭文でなければなりません。
    this();  //処理を記述
        ^
エラー 1 個
おこられた。

スーパークラスのコンストラクタ呼び出し

スーパークラスのコンストラクタを呼ぶこともできる。キーワードsuperを使う。
public class CoTest{
    public static void main(String args[]){
    	Test2 t2 = new Test2();
        t1.resultOutput();
    }
}

class Test{
    int num;

    public Test(){
        num = 0;
    }

    public void resultOutput(){
        System.out.println(num);
    }
}

class Test2 extends Test{
    int b = 5;

    public Test2(){
        super();
        num += b;
    }
}
結果。
5
superもコンストラクタの一番初めの行にしか書くことができない。

Advertisement

ショートカット

634
このカテゴリのトップページに戻る
634labs
   UIコレクションギャラリー

サイト検索

Google

Web サイト内

Y!ログール