superフィールド
日本語 | 親領域 |
英語 | super field |
ふりがな | すーぱーふぃーるど |
フリガナ | スーパーフィールド |
メソッド内で、そのメソッドを呼び出したインスタンスのスーパークラスを示す参照型変数。
superのフィールドとしての使用方法
メソッド内でスーパークラスのメソッドを呼ぶ際に使用する。
特に、オーバーライドしたメソッドから、オーバーライドされたメソッドを呼び出す際に使用される。「super.オーバーライドした(された)メソッド名();」という書式で、オーバーライドされたメソッドを呼び出すことができる。
この機能により、メソッドのオーバーライドで「メソッドの前処理・後処理の追加」を行うことができる。オーバーライドしたメソッドで何か処理をした後、オーバーライド元メソッドの呼び出し、その後再びオーバーライドしたメソッドで何か処理をすることで、「オーバーライド元メソッドの機能はそのままに、その前後に処理を加える」ということができる。
ただし、継承関係で親、子、孫、ひ孫と存在し、それぞれで親のメソッドをオーバーライドしていた場合、ひ孫からは孫のメソッドしか呼べない。継承関係の任意のメソッドを呼べるわけではないので注意。
基本的な使用方法はthisと同じであり、参照型変数として使用できることには代わりはない。
Javaでは、継承関係を含めてひとつのインスタンスのため、thisもsuperも同じ「自分自身」の参照値を持っている事に注意。
superのフィールドとしての使用方法
メソッド内でスーパークラスのメソッドを呼ぶ際に使用する。
特に、オーバーライドしたメソッドから、オーバーライドされたメソッドを呼び出す際に使用される。「super.オーバーライドした(された)メソッド名();」という書式で、オーバーライドされたメソッドを呼び出すことができる。
この機能により、メソッドのオーバーライドで「メソッドの前処理・後処理の追加」を行うことができる。オーバーライドしたメソッドで何か処理をした後、オーバーライド元メソッドの呼び出し、その後再びオーバーライドしたメソッドで何か処理をすることで、「オーバーライド元メソッドの機能はそのままに、その前後に処理を加える」ということができる。
ただし、継承関係で親、子、孫、ひ孫と存在し、それぞれで親のメソッドをオーバーライドしていた場合、ひ孫からは孫のメソッドしか呼べない。継承関係の任意のメソッドを呼べるわけではないので注意。
基本的な使用方法はthisと同じであり、参照型変数として使用できることには代わりはない。
Javaでは、継承関係を含めてひとつのインスタンスのため、thisもsuperも同じ「自分自身」の参照値を持っている事に注意。
参考サイト
- (参考サイトはありません)
// Sample.java
public class Sample
{
public static void main( String[] args )
{
// SubClassクラスを作ります。
SubClass subClass = new SubClass();
subClass.override();
// SubClass#override()
// SuperClass#override()
// SubClass@3bb2b8
// SubClass@3bb2b8
}
}
/**
* スーパークラス。
*/
class SuperClass
{
/**
* オーバーライド用メソッド。
*/
protected void override()
{
System.out.println( "SuperClass#override()" );
}
}
/**
* サブクラス。
*/
class SubClass extends SuperClass
{
/**
* オーバーライドするメソッド。
*/
public void override()
{
System.out.println( "SubClass#override()" );
// スーパークラスのメソッドSubClass#override()メソッドを呼び出します。
super.override();
// superは参照値としてはthisと同じです。
System.out.println( this.toString() );
System.out.println( super.toString() );
}
}
public class Sample
{
public static void main( String[] args )
{
// SubClassクラスを作ります。
SubClass subClass = new SubClass();
subClass.override();
// SubClass#override()
// SuperClass#override()
// SubClass@3bb2b8
// SubClass@3bb2b8
}
}
/**
* スーパークラス。
*/
class SuperClass
{
/**
* オーバーライド用メソッド。
*/
protected void override()
{
System.out.println( "SuperClass#override()" );
}
}
/**
* サブクラス。
*/
class SubClass extends SuperClass
{
/**
* オーバーライドするメソッド。
*/
public void override()
{
System.out.println( "SubClass#override()" );
// スーパークラスのメソッドSubClass#override()メソッドを呼び出します。
super.override();
// superは参照値としてはthisと同じです。
System.out.println( this.toString() );
System.out.println( super.toString() );
}
}
// Sample.java public class Sample { public static void main( String[] args ) { // SubClassクラスを作ります。 SubClass subClass = new SubClass(); subClass.override(); // SubClass#override() // SuperClass#override() // SubClass@3bb2b8 // SubClass@3bb2b8 } } /** * スーパークラス。 */ class SuperClass { /** * オーバーライド用メソッド。 */ protected void override() { System.out.println( "SuperClass#override()" ); } } /** * サブクラス。 */ class SubClass extends SuperClass { /** * オーバーライドするメソッド。 */ public void override() { System.out.println( "SubClass#override()" ); // スーパークラスのメソッドSubClass#override()メソッドを呼び出します。 super.override(); // superは参照値としてはthisと同じです。 System.out.println( this.toString() ); System.out.println( super.toString() ); } }
「みだし」に含まれているページ
「解説」に含まれているページ
「サンプルプログラムとか」に含まれているページ
- (参照している単語はありません)