オーバーライド
日本語 | 上書き |
英語 | override |
ふりがな | おーばーらいど |
フリガナ | オーバーライド |
サブクラスでメソッドの上書きをする機能。
サブクラスでスーパークラスと同じメソッド名、引数、戻り値のメソッドを定義することで、スーパークラスのメソッドではなく、サブクラスのメソッドが呼ばれるようにする機能。
Javaでは、クラスのインスタンスを作成したときに「自分が持っているメソッド」を憶えており、その際に「スーパークラスにのみ存在するメソッド」はそのまま憶え、「スーパークラスと同じメソッド(=オーバーライドしたメソッド)がある」場合にはそのメソッドを憶える。
そのため、インスタンスの参照を格納している型に関わらず、メソッドは「インスタンスを作成したときに憶えたメソッド」が呼ばれる。これがオーバーライドによる「ポリモーフィズム」の実現となる。
「オーバーロード」と言葉が似ているが全く異なるものなので混同しないこと。
サブクラスでスーパークラスと同じメソッド名、引数、戻り値のメソッドを定義することで、スーパークラスのメソッドではなく、サブクラスのメソッドが呼ばれるようにする機能。
Javaでは、クラスのインスタンスを作成したときに「自分が持っているメソッド」を憶えており、その際に「スーパークラスにのみ存在するメソッド」はそのまま憶え、「スーパークラスと同じメソッド(=オーバーライドしたメソッド)がある」場合にはそのメソッドを憶える。
そのため、インスタンスの参照を格納している型に関わらず、メソッドは「インスタンスを作成したときに憶えたメソッド」が呼ばれる。これがオーバーライドによる「ポリモーフィズム」の実現となる。
「オーバーロード」と言葉が似ているが全く異なるものなので混同しないこと。
参考サイト
- (参考サイトはありません)
// Sample.java
public class Sample
{
public static void main( String[] args )
{
// SubClassのインスタンスを作成し、オーバーライドされた
// メソッドを呼び出します。
SuperClass superClass = new SubClass();
superClass.overridable();
// SubClass#overridable()
// このように、入れてる変数の型に関わらず、
// インスタンスを作った時のクラスのメソッドが
// 呼ばれます。
// スーパークラスでインスタンスを作れば、
// スーパークラスのメソッドが呼ばれるので注意。
SuperClass superClass2 = new SuperClass();
superClass2.overridable();
// SuperClass#overridable()
// APIでの例。
Object object = new String( "A" );
System.out.println( object.hashCode() );
// 65
// Object#hashCode()は「インスタンスの参照の値」を返すが、
// String#hashCode()でオーバーライドされているため、
// 「文字列を元にして作られたハッシュコード」が返されます。
// オーバーライドやポリモーフィズムはJ2SE APIにも
// 頻繁に使われているので探してみましょう(IOとか例外とか)。
}
}
/**
* スーパークラス。
*/
class SuperClass
{
/**
* オーバーライドされるメソッド。
*/
public void overridable()
{
System.out.println( "SuperClass#overridable()" );
}
}
/**
* サブクラス。
*/
class SubClass extends SuperClass
{
/**
* オーバーライドするメソッド。
* メソッド名、引数、戻り値がスーパークラスのものと
* 同じということを確認してください。
*/
public void overridable()
{
System.out.println( "SubClass#overridable()" );
}
}
public class Sample
{
public static void main( String[] args )
{
// SubClassのインスタンスを作成し、オーバーライドされた
// メソッドを呼び出します。
SuperClass superClass = new SubClass();
superClass.overridable();
// SubClass#overridable()
// このように、入れてる変数の型に関わらず、
// インスタンスを作った時のクラスのメソッドが
// 呼ばれます。
// スーパークラスでインスタンスを作れば、
// スーパークラスのメソッドが呼ばれるので注意。
SuperClass superClass2 = new SuperClass();
superClass2.overridable();
// SuperClass#overridable()
// APIでの例。
Object object = new String( "A" );
System.out.println( object.hashCode() );
// 65
// Object#hashCode()は「インスタンスの参照の値」を返すが、
// String#hashCode()でオーバーライドされているため、
// 「文字列を元にして作られたハッシュコード」が返されます。
// オーバーライドやポリモーフィズムはJ2SE APIにも
// 頻繁に使われているので探してみましょう(IOとか例外とか)。
}
}
/**
* スーパークラス。
*/
class SuperClass
{
/**
* オーバーライドされるメソッド。
*/
public void overridable()
{
System.out.println( "SuperClass#overridable()" );
}
}
/**
* サブクラス。
*/
class SubClass extends SuperClass
{
/**
* オーバーライドするメソッド。
* メソッド名、引数、戻り値がスーパークラスのものと
* 同じということを確認してください。
*/
public void overridable()
{
System.out.println( "SubClass#overridable()" );
}
}
// Sample.java public class Sample { public static void main( String[] args ) { // SubClassのインスタンスを作成し、オーバーライドされた // メソッドを呼び出します。 SuperClass superClass = new SubClass(); superClass.overridable(); // SubClass#overridable() // このように、入れてる変数の型に関わらず、 // インスタンスを作った時のクラスのメソッドが // 呼ばれます。 // スーパークラスでインスタンスを作れば、 // スーパークラスのメソッドが呼ばれるので注意。 SuperClass superClass2 = new SuperClass(); superClass2.overridable(); // SuperClass#overridable() // APIでの例。 Object object = new String( "A" ); System.out.println( object.hashCode() ); // 65 // Object#hashCode()は「インスタンスの参照の値」を返すが、 // String#hashCode()でオーバーライドされているため、 // 「文字列を元にして作られたハッシュコード」が返されます。 // オーバーライドやポリモーフィズムはJ2SE APIにも // 頻繁に使われているので探してみましょう(IOとか例外とか)。 } } /** * スーパークラス。 */ class SuperClass { /** * オーバーライドされるメソッド。 */ public void overridable() { System.out.println( "SuperClass#overridable()" ); } } /** * サブクラス。 */ class SubClass extends SuperClass { /** * オーバーライドするメソッド。 * メソッド名、引数、戻り値がスーパークラスのものと * 同じということを確認してください。 */ public void overridable() { System.out.println( "SubClass#overridable()" ); } }
「みだし」に含まれているページ
「解説」に含まれているページ
- Applet
- C++言語
- clone
- Cloneable
- doGet
- doPost
- DTD
- equals
- finalメソッド
- Graphics
- HttpServlet
- init
- InputStream
- JTree
- Map
- OutputStream
- protected
- protectedメソッド
- publicメソッド
- Reader
- Runnable
- superフィールド
- Thread
- throws
- toString
- Writer
- アップキャスト
- アドレス
- イベント
- イベントリスナー
- インターフェイス
- オブジェクト指向
- オーバーライド
- オーバーロード
- カスタムタグライブラリ
- コンストラクタ修飾子
- サーブレット
- シグネチャー
- シンタックス
- フレームワーク
- ポリモーフィズム
- 再描画
- 匿名クラス
- 参照
- 実装
- 抽象クラス
- 描画
- 継承
「サンプルプログラムとか」に含まれているページ
- abstract
- abstractクラス
- AWT
- Caused by
- clone
- Cloneable
- CloneNotSupportedException
- equals
- finalメソッド
- Frame
- GUI
- implements
- InputStream
- interface
- InterruptedException
- Map
- MVC
- println
- privateメソッド
- protectedメソッド
- publicメソッド
- Reader
- Runnable
- super
- superフィールド
- synchronizedブロック
- synchronizedメソッド
- Thread
- toString
- volatile
- Writer
- yield
- アドレス
- インターフェイス
- オーバーライド
- コントローラー
- サブクラス
- スレッド
- スーパークラス
- ダイアログ
- デッドロック
- ビュー
- ブロックします
- ポリモーフィズム
- マルチスレッド
- メッセージボックス
- モデル
- モーダルダイアログ
- モードレスダイアログ
- ロック
- 再描画
- 動的
- 動的束縛
- 匿名クラス
- 参照
- 同期
- 子クラス
- 安定ソート
- 実装
- 抽象クラス
- 抽象メソッド
- 排他
- 派生クラス
- 浅いコピー
- 深いコピー
- 親クラス