第十九章 
 〜クラス編〜
 抽象クラス
 抽象クラスと言うのは抽象的な表現をするクラスで、オブジェクトを作成できない。
抽象メソッドを持っている。などの特徴があるです。
オブジェクトを作成できないと言うのは、
new 抽象クラス名
この書き方をするとエラーがでるです。

 ではいったいこんな謎のクラスをどのように使うかと言うですと、今回は動物を例に
説明していくです。動物には大きく分けて肉食動物と草食動物がいるですね!どちらも
動物ということには変わりないです。具体的に言わないで抽象的に言うから抽象表現っ
て言うですね!これで言うと動物は抽象表現ですね!
 肉食動物は肉を食べて、草食動物は草を食べるです。そし両方とも食べるということ
には変わりないです。このとき食べると言うのも抽象表現にあたるですね!今のをまと
めて見るですと・・・

 抽象的に言うと:動物は食べる(何を食べてるかはそれぞれの動物によって変わる)
 具体的に言うと:草食動物は草を食べる
         肉食動物は肉を食べる

 動物は食べるにもう少し付け足すと、どんな動物かも分からないということです。
ただ分かるのは動物は動物だと言うことです。

 今言ったようなことから動物は抽象クラスに当たるはずです。そして具体的に
抽象クラスとはどのような表現をするのかをサンプルで見てほしいです〜
Rei19_1
 1:
 2:
 3:
 4:
 5:
 6:
 7:
 8:
 9:
 10:
 11:
 12:
 13:
 14:
 15:
 16:
 17:
 18:
 19:
 20:
 21:
 22:
 23:
 24:
 25:
 26:
 27:
 28:
 29:
 30:
 31:
 32:
 33:
 34:
 35:
 36:
 37:
 38:
 39:
 40:
 41:
 42:
 43:
 44:
 45:
 46:
 47:
 48:
 49:
 50:
class Rei19_1{
    public static void main(String[] args){
        Carnivorous tiger  = new Carnivorous();
        Herbivorous rabbit = new Herbivorous();

        tiger.eat();
        rabbit.eat();

        int cRyou = tiger.getRyou();
        int hRyou = rabbit.getRyou();

        System.out.println(tiger.getType()  + "が食べた量" + cRyou);
        System.out.println(rabbit.getType() + "が食べた量" + hRyou);
    }
}

abstract class Animal{
    protected int ryou;

    public int getRyou(){
        return ryou;
    }

    public abstract void eat();
    public abstract String getType();
}

//肉食動物////////////////////////
class Carnivorous extends Animal{
    public void eat(){
        System.out.println("肉を食べる");
        ryou = 1000;
    }

    public String getType(){
        return "肉食動物";
    }
}

//草食動物////////////////////////
class Herbivorous extends Animal{
    public void eat(){
        System.out.println("草を食べる");
        ryou = 300;
    }

    public String getType(){
        return "草食動物";
    }
}

 17行目のAnimalクラスの宣言に注目してほしいです。このabstractこそ抽象クラスを
表現するときに使うキーワードです。抽象クラスだけでなく抽象メソッドを宣言するの
にもこのキーワードを使うです。24行目のeat()メソッドがそうですね!
そしてeat()メソッドの書き方も今までと違うです。()のあとが;になっているのに気が
ついてほしいです。抽象メソッドは{}を書くことできないです。これは処理を書くこと
ができないと言う意味を表している。
 25行目のgetType()メソッドも抽象メソッドですね。このtypeというのは
ここでは動物の種類を表しているです。Carnivorousクラスだったら肉食動物を、
Herbivorousクラスだったら草食動物とそれぞれにあった動物の種類を取得するです。


今回のポイント
@ 抽象クラスはオブジェクトを作成できない
A 抽象メソッドは処理を書くことができない
B 抽象を表すときはabstractを付ける

TOPに戻る   Java講座に戻る