PHASE2 LOG

主にIT関連・ゲームのログ

Javaのお勉強~抽象クラス~

      2016/03/12

勉強する前に抽象クラスについて軽く調べてみましたが…どういう時に使うのかがイメージしづらいですね。

 

そんな抽象クラスを勉強してみます。

 

抽象メソッドと抽象クラス

 

処理がなく、呼び出し方だけ定義してあるメソッドを抽象メソッドといいます。

その抽象メソッドを持つクラスのことを抽象クラスといいます。

 

「抽象」という言葉は、概念を表していて具体的なことが定義されていないといった意味合いです。

抽象クラスからはインスタンス化することはできず、メソッドの内容も空です。

 

そんなもの一体何に使うの?っていうのが私の最初の疑問でした(;・∀・)

 

抽象クラスを利用するには、その抽象クラスを継承して

抽象メソッドをオーバーライドする必要があります。

 

要は抽象クラスで概念だけ用意しておいて、実際にオブジェクトごとに

細かい処理を行うのは抽象メソッドをオーバーライドしたメソッドというわけです。

 

abstract(アブストラクト)

 

抽象メソッドや抽象クラスを定義するには「abstract」を使います。

 

ここで、抽象クラスの利用例を見てみます。

 

abstract class Poke{	//抽象クラス
	String name;
	abstract void attack();	//抽象メソッド
}

class Pikachu extends Poke {	//抽象クラスを継承
	String name() {
		name = "ピカチュウ";
		return name;
	}
	//抽象メソッドをオーバーライド
	void attack() {
		System.out.println("でんきショック");
	}
}

class Abstruct {
	public static void main(String[] args){				
		//Poke poke1 = new Poke();	//抽象クラスはインスタンス化できない
		
		Pikachu pika = new Pikachu();
		System.out.println(pika.name());
		pika.attack();
	}
}

 

抽象クラスはabstractが使われているPokeクラスです。

そのPokeクラスを継承したPikaクラスで、抽象メソッドをオーバーライドして

実際の処理内容はこちらに記述されています。

 

また、抽象クラスからインスタンス化できないので「new Poke()」はエラーになりますね。

 

Pokeクラスはポケモンという概念を指していて、ポケモンであるピカチュウの情報を、

概念を継承したPikachuクラスで実際に定義しているといったところでしょうか。

 

なかなか上手く説明できませんが(笑)

 

イメージにしてみるとこんな感じです。

abstract

 

抽象クラスについてなんとなくわかってきた気がします。

ただ、なぜこんな回りくどいことをするのかっていうのはまだ明確には

説明できないかも(;・∀・)

 

抽象クラスを利用する意義が説明できるようになったらまた更新します!

 

人気ブログランキング

 -