java 第22回  抽象クラス | whichのブログ ~プログラミング体験記~

whichのブログ ~プログラミング体験記~

主にJava,vVsual C#,Andoroid,SQLについて
覚え基本た文法やプログラミング技法、各クラスの利用法を
忘れないように形にしたものです

初心者だとかプロだとか特に意識せず利用してもらえるとうれしいです。

ポリモルフィズムを利用したプログラムをつくるときに必ずオーバーライドする必要がある。
つまるところどうせオーバーライドするのであればスーパークラスでわざわざ処理を書く必要がない
(継承関係が他のクラスで成り立つ可能性が低いならなおさら)

そこでJavaにはメソッドの処理をあいまい(未定義)で記述する抽象メソッド用意する抽象クラスで定義することでメソッド名の宣言だけしてそのような煩わしさをなくせる。

■抽象メソッドのルールと何もしないメソッドとの違い
通常のメソッドの記述は、
public void method() {

}
のようなかじで{ }の間に処理を記述することで処理を実行できる
ところが何も書いていないと、「未定義」ではなく「何もしない」という処理を定義している

抽象化とは未定義のまま宣言する方法であるため

public  abstruct  void  method();
と上記のメソッドを書き直すとことではじめて抽象メソッドとなる

細かいルールをまとめると

1.記述: アクセス修飾子  abstruct   返却値 メソッド名(引数); ←「{ }」で終わるのではなく呼び出しのときのように「;」で終わる
2.クラス宣言  : 抽象メソッド(abstruct修飾のメソッド)が1つでも定義されているなら、 アクセス修飾子 abstruct  class クラス名 { }
3.コンストラクタ : 抽象クラスはインスタンス生成ができないので定義しないほうがよい

■サンプル

public abstruct class AbsClass {        
        abstruct    void show();
} 
public class SubClass extends AbsClass{
       int num;
      String name;
     SubClass(String name,int num) {this.name=name; this.num=num; }

   void show(){
            System.out.print(name + "さんは" + num + "歳です");
   }
}
public class MainClass {
      public static void main(String [] gf) {
             SuperClass sc = new SubClass("田中",25);
            
             sc.show();
     }
}


----------
実行結果
----------
田中さんは25歳です
----------

実行結果は前回のポリモルフィズムと同じ振る舞いになります