this

スーパークラスのメンバーにアクセスするにはキーワード superを使用しました。
逆にサブクラス自身のメンバーへのアクセスに使われるキーワードがthisです

つまり、自分のクラスのメンバーにアクセスするためにthisを使います。

以下のプログラムを見てください。

サンプルプログラム(Sample54.java)

class Sample54{
    public static void main(String args[]){

    Sub54 obj = new Sub54();
    obj.method();

    }

}

class Super54{

     int x = 20;
void method(){ System.out.println("これはスーパークラスです"); System.out.println("int x = " + x); } } class Sub54 extends Super54{ int x = 10; void method(){ this.x +=100; super.method(); System.out.println("これはサブクラスです"); System.out.println("int x =" + x); } }

プログラムをコピーする場合すべて選択をクリックしてください。

Sponsored link

コンパイル・実行してみます。

ここではメンバー全てをオーバーライドしています。
サブクラスのmethod内では、Super54クラスのメソッドをsuper.mrthod()で呼び出しています。
サブクラスのメンバー変数をthisをつけて更新していますが、自身のクラスのメンバー変数
xであるということを明示的に表すためにthisをつけています。

しかし、thisの使用はあくまでも任意です。 別につけなくてもよいのです。
thisをつけなければ、コンパイラによって自動的につけられます。

次のプログラムを見ていきます。

サンプルプログラム(Sample54_1.java)

class Sample54_1{
    public static void main(String args[]){
    Sub54_1 obj = new Sub54_1();
    obj.method();
 
    }

}
class Super54_1{

     int x = 20;   
     void method(){
      System.out.println("これはスーパークラスです");
      System.out.println("int x = " + x);
  }
}

class Sub54_1 extends Super54_1{

    int x = 10;
    void method(){
    x +=100;
    super.method();
    System.out.println("これはサブクラスです");
    System.out.println("int x =" + x);
   }
}

プログラムをコピーする場合すべて選択をクリックしてください。

Sponsored link

3ヵ月、6ヶ月、12ヶ月…。好きなだけホームページやろうよ。
月額525円からのホームページサービス、プチ


コンパイル・実行してみます。

このようにSample54 と Sample54_1 は同じ結果になります。

しかし、なかにはthisをつけなければ困るケースがあります。 それは、メンバー変数とローカル変数の区別です。

次のプログラムを見ていきます。

サンプルプログラム(Sample54_2.java)

class Sample54_2{
    public static void main(String args[]){

     Super54_2 obj = new Super54_2();
     obj.method();
    }

}

class Super54_2{
     int x = 100 ;

     void method(){

     int x = 10;

      System.out.println("int x = " + this.x);
      System.out.println("int x = " + x);

  }
}

プログラムをコピーする場合すべて選択をクリックしてください。

Sponsored link

仮想専用サーバ
資料請求が簡単にできる比較.com!資格スクール多数掲載


コンパイル・実行してみます。

最初の説明でthisをつければ自クラスのメンバーにアクセスできます。
ここでは、メソッドmethod()内でthis.xとすることでメンバー変数にアクセスしています。
また、thisがなければメソッド内のローカル変数にアクセスしています。

では、thisを使ったプログラムをもうひとつ確認したいと思います。

サンプルプログラム(Sample54_3.java)

class Sample54_3{
    public static void main(String args[]){


    Super54_3 obj = new Super54_3();

     obj.method(50);
     obj.display();
 
    }

}
class Super54_3{

  int x = 100;

    void method(int x){
   this.x = x;

  System.out.println("int x = " + x);

 }
   void display(){
   System.out.println("int x = " + x);
 }
}
 

プログラムをコピーする場合すべて選択をクリックしてください。

Sponsored link

コンパイル・実行してみます。

このようにメンバー変数の値が100で代入されていますが、
メソッド内でthis.x = x; とすることで、メンバー変数の値が書きかえられていて、
ローカル変数の x の値が代入されています。

では、もうひとつプログラムを見ていきます。

サンプルプログラム(Sample54_4.java)

class Sample54_4{
    public static void main(String args[]){


   Super54_4 obj = new Super54_4();
     obj.method(50);
     obj.display();

    }

}


class Super54_4{

  int x = 100;

    void method(int x){
  System.out.println("int x = " + x);
 }
   void display(){
   System.out.println("int x = " + x);
 }
}

プログラムをコピーする場合すべて選択をクリックしてください。

Sponsored link

月額263円でPHP・MySQL対応のレンタルサーバー、ミニバード


コンパイル・実行してみます。

this.xを記述しなかっただけで出力結果が変わりました。

ページのトップへ戻る