0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

自分用java学習 ~抽象クラス abstract~

Posted at

抽象クラス

抽象クラスは自身でインスタンスを生成しない。
例えば...鳥にはカラスやスズメといった具体的な名前があり、「鳴く」という動作を共通でする。
抽象クラスは、「具体的にどう動くかは決まっていないけど、共通する性質や振る舞いを持つ」クラス
・設計図だけがあって、実際の動きは子クラス(サブクラス)が決める的な感じ

コードを用いた例

Bird抽象クラス

Bird.java
abstract class Bird {

    abstract void sing(); //  すべての鳥は「鳴く」という共通の動作をする(抽象メソッド)

    void fly() {

        System.out.println("バサバサ飛びます");
    }
}

・avstractが付いているクラスは抽象クラス
・abstract void sig(); のように中身が書かれていないメソッドは「抽象メソッド」という
→これは「子クラスで必ず実装しなさい」という意味
CrowクラスとSparrowクラス

Crow.java
class Crow extends Bird {

    @Overrride
    void sing() {

        System.out.println("カーカー");
    }
}
Sparrow.java
class Sparrow extends Bird {

    @Override 
    void sing() {

        System.out.println("チュンチュン");
    }
}

・Birdクラスをextends(継承)している
・sing()メソッドをそれぞれ実装している

それらを踏まえて実行してみる
Main.java
public class Main {
    public static void main(String[] args) {
    
        Bird crow = new Crow();
        Bird sparrow = new Sparrow();
    
        crow.sing();
        crow.fly();
    
        sparrow.sing();
        sparrow.sing();
    }
}
ポイントまとめ

・抽象クラス
→「共通部分」をまとめた設計図。直接インスタンス化できない。

・抽象メソッド
→「子クラスで必ず作らなきゃダメなメソッド」。中身は書かない。

・目的
→「共通部分は抽象クラスで」「違いはサブクラスで」。効率的でわかりやすいコードになる

終わりに

@Overrideアノテーションやsperについては次回書こうと思います。
少しずつ複雑になってきましたが頑張ります。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?