オーバーライド とは

C++ でも C# でも Java でも同じ書き方・制約だと思ってる。
が、違うところあった。書く時にまた調べる。↓ は Java サイトから。

親クラス ( スーパークラス ) で定義されているメソッド
子クラス ( サブクラス ) で再定義すること

これにより、
親クラスのメソッドを変更することはできないが、子クラスに特化した
機能を付与できる。

 

    // クラス
    class SuperClass
    {
        public void Hoge(int x)
        {
            // 処理 A
            :
            :
           

    // クラス ( C# なら class SubClass : SuperClass { ~ )
    class SubClass extends SuperClass
    {
        public void Hoge(int x)
        {
            // 処理 a
            :
            :

 

制約

1.
オーバーライドする側 ( ) はオーバーライドされる側 ( ) と
戻り型メソッド名引数型引数の数」が全て一致する必要あり。
どれか一つでも異なるとオーバーライドとは見なされない。

 

2.
オーバーライドされる側 ( ) のメソッドに指定されるアクセスレベルより
厳しい制限を持つアクセスレベルをオーバーライドする側 ( ) の
メソッドに付与することは出来ない
ex ) 「 親 → protected 。子 → private 」は 出来ない 。

 

3.
オーバーライドされる側 ( ) のメソッドに指定される throws 節以外の例外
オーバーライドする側 ( ) のメソッドに指定することは出来ない
だが、
オーバーライドされる側に指定された例外より
限定する例外をオーバーライドする側に指定することは可

 

4.
オーバーライドされる側 ( ) のメソッドに final 修飾子が付与されている場合、
そのインスタンスメソッドをオーバーライドすることは出来ない

 

5.
オーバーライドされる側 ( ) のメソッドに abstract 修飾子
付与されている場合、
そのメソッドはサブクラス必ずオーバーライドしなければならない。
オーバーライドしない場合
そのサブクラス ( 子 ) 全体が abstract クラスになる。

abstract
処理内容がまだ定義されていないメソッド という意味。
継承、オーバーライドされることが大前提
abstract なメソッドを持つクラスは、クラス自体にも abstract を付ける。
なぜ必要かというと、
Super クラスを継承するクラスには Hoge メソッドがないと
コンパイルが通らないという状態を作る為。
設計された決まり事 ( クラス設計 ) を正確に実現する為

 

 

こちらから。
http://write-remember.com/archives/2873/
http://www.javaroad.jp/java_class8.htm
https://nobuo-create.net/java-beginner-29/
https://qiita.com/ShirakawaMaru/items/058484a8fb584eb452b2

 

以上。

C# では親のメソッドに virtual 修飾子、子のメソッドに override 修飾子をつける。