\r\n\r\n
Javaプログラミングでは、"this "と "super "というキーワードが使われます。これらのキーワードは、変数名やその他の識別子として使用することはできません。プログラムやソフトウェアは、オブジェクトを使ってモデル化することができます。OOPの柱のひとつに継承があります。コードの再利用性を実現します。すでに存在するクラスはスーパークラス、派生クラスはサブクラスです。スーパーキーワードはスーパークラスのオブジェクトを参照するために使用することができます。複数のオブジェクトが存在する。this」と「super」の主な違いは、「this」が現在のオブジェクトを参照するために使われる参照変数であるのに対し、「super」は直接のスーパークラスのオブジェクトを参照するために使われる参照変数である点です。
1. 概要と主な違い 2. Javaにおけるthisとは 3. Javaにおけるsuperとは 4. Javaにおけるsuperとの類似点 5. 横並び比較 - 表形式でJavaにおけるsuperと比較 6. まとめ
キーワード "this "は、与えられたJavaプログラムを参照し、現在のオブジェクトを参照するために使用されます。
図01:このキーワードを使用したJavaプログラム
Javaでは、3つのタイプの変数があります。インスタンス変数、ローカル変数、クラス変数です。上記のプログラムによると、Employee クラスは 2 つのインスタンス変数を持ちます。IDと名前です。ローカル変数は、メソッドに所属する変数です。クラス変数は、すべてのオブジェクトで共有されます。id と name は Employee コンストラクタに渡されます。もしプログラマが id=id と書いた場合、コンストラクタが id と name をすでに持っているので、インスタンス変数を初期化することはありません。インスタンス変数には値がありません。そのため、印刷するとNULL値が表示されます。使用された場合、現在のオブジェクトを参照する。したがって、コンストラクタにidとnameを指定すると、インスタンス変数が設定されます。
キーワード "this "は、現在のクラスメソッドを呼び出すために使用することができます。
公開教科書発表会{/p
public static void main(String[]args){...
Myclass Myclass = new Myclass().
マイクラス.B()。
}
}
マイクラス
パブリックスペースA (){
System.out.println("A")。
}
パブリックスペースB (){
システム出力原理(「B」)。
この1.A()。
}
}
Myclassというクラスには、2つのメソッドがあります。それらはメソッドAとメソッドBで、Myclassオブジェクトを生成してメソッドBを呼び出すとB, Aが出力されます。 メソッドBでは、プリントBの後にthis.a()という文が続きます。これを使うと、現在のクラスのメソッドが呼び出されます。
このキーワードは、現在のクラスのコンストラクタを呼び出すためにも使用できます。
公開教科書発表会{/p
public static void main(String[]args){...
A obj = new A(5).
}
}
クラスA
パブリック A (){
System.out.println ("builder A").
}
public A (int x) {.
この()。
System.out.println ("パラメタライズドコンストラクタA").
}
}
上記のプログラムによると、クラスAはデフォルトコンストラクタとパラメータ付きコンストラクタを持ちます。パラメータ化されたコンストラクタは、オブジェクトが作成されるときに呼び出されます。パラメータ化されたコンストラクタでは、this()のような記述があります。これは、現在のクラスのコンストラクタ、つまりa()を呼び出すことになります。
スーパーというキーワードは、継承に関係するものです。オブジェクト指向プログラミングでは、継承が重要な概念となる。既存のクラスのプロパティやメソッドを新しいクラスで使用することができます。すでに存在するクラスを親または親クラスと呼びます。新しいクラスは、子クラスまたはサブクラスと呼ばれます。
「super は、直接の親クラスのオブジェクトを参照するための参照変数である。
クラスAとクラスBがあり、クラスAをスーパークラス、クラスBをサブクラスとします。クラスAとクラスBは両方ともdisplayメソッドを持っています。
パブリックAグレード
Public void display (){(パブリックボイドディスプレイ)。
System.out.println("A")。
}
}
パブリックBエクステンションA{
Public void display (){(パブリックボイドディスプレイ)。
System.out.println("B")。
}
}
クラスAはdisplayメソッドを持っていますが、サブクラスBのdisplayメソッドでオーバーライドされています。もし、プログラマーがクラス A の display メソッドを呼び出したいのであれば、super キーワードを使用します。与えられたJavaプログラムを参照してください。
図02:superキーワードを使用したJavaプログラム
上記のプログラムによると、クラスAは値10を持つnumberという名前の変数を持ち、クラスBはAを継承して値20を持つnumberという名前の変数を持つ。通常、B型のオブジェクトを生成してdisplayメソッドを呼び出すと、スーパークラスの値が新しいクラスでオーバーライドされるため、サブクラスで数値を与える必要があります。スーパー番号を使用することで、スーパークラス番号の値が出力されます。
super() は、スーパークラスのコンストラクタを呼び出すために使用することができます。
ビジネスクラス チーフスチュワード
public static void main(string[]args){...
B obj = new B ().
}
}
クラスA
A() {
System.out.println("A")。
}
}
A{にクラスBの拡張
B() {
スーパー()。
System.out.println("B")。
}
}
上記のプログラムによると、クラスAはコンストラクタA()を持ちます。クラスBは、コンストラクタB()を持ちます。クラスBはクラスAを継承しています。B型のオブジェクトを作成すると、出力としてAをBで表示します。B()コンストラクタはsuper()を持ちます。したがって、A のコンストラクタが最初に呼ばれ、次に B のコンストラクタが呼ばれます。super() が書かれていない場合でも、親コンストラクタはデフォルトで呼び出されます。
この方式を採用しているスーパーユーザーを以下に紹介します。
図03:スーパークラスのメソッドを呼び出すJavaプログラム
クラスAは、上記の手順で表示方法を決定します。クラスBにも表示方法があります。BクラスはAを継承しており、B型のオブジェクトを生成してdisplayメソッドを呼び出すと、AとBの形式で出力されます。クラスBの表示メソッドでは、super display()が使用されています。このメソッドでは、まず "A "をプリントする。すると、"B "と印字される。
このペアは、スーパー | |
"this "は現在のオブジェクトを参照するために使用される参照変数です。 | "super "は、直属のスーパークラス・オブジェクトを参照するために使用される参照変数です。 |
インスタンス変数 | |
これで現在のクラスインスタンス変数を参照することができる。 | スーパークラスのインスタンス変数はsuperを使用して参照することができます。 |
クラスメソッド | |
これを用いて、現在のクラスメソッドを呼び出すことができる。 | スーパークラスのメソッドは、super を使って呼び出すことができます。 |
コンストラクタ | |
現在のクラスのコンストラクタは、this()を使って呼び出すことができます。 | スーパークラスのコンストラクタは、super()を使って呼び出すことができます。 |
Javaでは "this "と "super "というキーワードが使われます。このキーワードは、変数名やその他の識別子名として使用することはできません。同じように見えて、違うんです。super が直前のスーパークラスのオブジェクトを参照するために使われる参照変数であるのに対し、super は現在のオブジェクトを参照する参照変数である点が異なります。
本記事のPDF版をダウンロードし、オフラインで使用する場合は、引用の指示に従ってください。PDF版のダウンロードはこちら:Javaのsuperとは異なります。