抽象クラス
抽象クラスは自身でインスタンスを生成しない。
例えば...鳥にはカラスやスズメといった具体的な名前があり、「鳴く」という動作を共通でする。
抽象クラスは、「具体的にどう動くかは決まっていないけど、共通する性質や振る舞いを持つ」クラス
・設計図だけがあって、実際の動きは子クラス(サブクラス)が決める的な感じ
コードを用いた例
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については次回書こうと思います。
少しずつ複雑になってきましたが頑張ります。