初心者向けのJava講座です。一緒にJavaを勉強しませんか?
はじめてのJava入門初心者向けのJava講座 |
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を記述しなかっただけで出力結果が変わりました。