ホームページ >Java >&#&チュートリアル >Javaでのスーパーキーワードの使い方を詳しく解説
この記事は主に Java スーパー キーワードの詳細な使用法に関する関連情報を紹介し、この記事が皆さんに役立つことを願っており、必要な方はスーパー キーワードを構築方法で参照することができます。キーワード
Java サブクラスのコンストラクターでは、super キーワードを使用して親クラスのコンストラクターを呼び出すことができます。その使用法は次のとおりです:
1) super(); 親クラスのパラメータなしのコンストラクターにアクセスします
2) super (paras…); 親クラスのメンバー関数 yyy にアクセスして、このクラスにはパラメータのないコンストラクタがありますが、super() が使用されない場合でも、親クラスのパラメータのないコンストラクタがデフォルトで呼び出されます。親クラスのパラメーターなしのコンストラクターは、パラメーターなしのカスタム コンストラクターまたはコンパイラーによって自動的に生成されるデフォルトのコンストラクターにすることができます。ただし、パラメーター化されたコンストラクターが親クラスで定義されているが、パラメーターなしのコンストラクターが定義されていない場合、コンパイラーはデフォルトのコンストラクターを生成せず、そのコンストラクターを super() を通じて呼び出すことはできません。さらに、引数のないプライベート コンストラクターが親クラスで定義されている場合、super() を通じて呼び出すことはできません。
super(paras…); は、親クラスでパラメーター化されたコンストラクターを呼び出すために使用されます。
super は親クラスのコンストラクターを呼び出し、サブクラスのコンストラクターの最初の行で実行する必要があります。パラメーターを持つ親クラスのコンストラクターが呼び出された場合、サブクラス内の非静的メンバー変数はスーパーパラメーターで使用できません (静的メンバー変数は、コンストラクターが実行される前に初期化されているため使用できます)。 this または super への関連呼び出しが使用されます。たとえば、 super(super.getClass().getName());
コンストラクターで super キーワードを使用して、親クラスのメンバー変数とメンバー関数にアクセスすることもできます。その使用法は、非コンストラクター メソッドの super キーワードと同じです。
非コンストラクター メソッドの super キーワード
Java サブクラスでは、super キーワードを使用して、親クラスのメンバー変数とメソッドを呼び出すことができます。その使い方は。
1) super.xxx; 親クラスのメンバー変数 xxx にアクセスします 2) super.yyy(paras…); 親クラスのメンバー関数 yyy にアクセスします
super キーワードはメンバー変数とメンバーにアクセスします親クラスの関数はアクセス制御を超えることはできず、親クラスのプライベート メンバー変数やメソッドにアクセスすることはできません。例:
class a { private int mNum = 0; } class b extends a { public void setNum(int i) { super.mNum = i; //错误,不能访问父类的private成员 } }複数レベルの継承関係がある場合、super は自身の親クラスのメンバー変数とメソッドのみを呼び出すことができ、親クラスを超えて親クラスの親クラスのメンバー変数やメソッドを直接呼び出すことはできません。 。もちろん、親クラスの親クラスのメンバ変数やメソッドを親クラスに継承していれば、そのメンバ変数やメソッドをsuper経由で呼び出すことは可能ですが、このとき親クラスのメンバ変数やメソッドは実際に呼ばれました。例:
class a { protected int mNum = 0; public void setNum(int i) { mNum = i; } } class b extends a { public void setNum(int i) { mNum = i * i; } } class c extends b { public void setNum(int i) { super.setNum(i); //调用的是b中的setNum()方法 super.super.setNum(i); //错误,不支持的用法 } }
class a { protected int mNum = 0; public void setNum(int i) { mNum = i; } } class b extends a { } class c extends b { public void setNum(int i) { super.setNum(i); //正确,虽然b中没有实现setNum(),但b中继承了a的setNum()函数, //c中调用super.setNum()调用的是b的setNum()函数,可以执行。 } }
以上がJavaでのスーパーキーワードの使い方を詳しく解説の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。