java-7.1抽象類と抽象的な方法を初めから認識する。

2714 ワード

この章では、抽象類と抽象的な方法について話しましょう。
1.抽象類と抽象的な方法は何ですか?
種類と方法の前にabstractを加えると、この類または方法は抽象類です。
package com.ray.ch07;

public class Test {

}

abstract class Instument {
	public abstract void Play();
}
2.抽象類と抽象的な方法の特性
抽象クラス:
(1)抽象類は全部抽象的な方法ではなく、ある方法も実現できる。
(2)抽象的な方法を持っているのは必然的に抽象的なものである
(3)具体化できない
抽象的な方法:
(1)実現されていないabstract表示を使用する方法
(2)抽象類を継承するサブクラスは、抽象的な方法を実現しなければならない。
3.実例的な対比
次に、抽象類と普通類の違いを比較する二つの例を示します。
package com.ray.ch07;

public class Test {
	public void tune(Instrument instrument) {
		instrument.Play();
	}

	public void tune(Instrument[] instruments) {
		for (int i = 0; i < instruments.length; i++) {
			tune(instruments[i]);
		}
	}

	public static void main(String[] args) {
		Test test = new Test();
		Instrument instrument = new Instrument();
		Wind wind = new Wind();
		Bass bass = new Bass();
		Instrument[] instruments = { instrument, wind, bass };
		test.tune(instruments);
	}
}

class Instrument {
	public void Play() {
		System.out.println("instrument play");
	}
}

class Wind extends Instrument {
	@Override
	public void Play() {
		System.out.println("wind play");
	}
}

class Bass extends Instrument {
	@Override
	public void Play() {
		System.out.println("bass play");
	}
}
上の例は抽象類を使っていません。この中でnew Instruumentはできますが、問題が発生します。ほとんどのコードの時間の中で、Instrumentという種類はnewではなくて、instrumentの中のプレイは普通呼び出さなくてもいいです。ですから、この方法はあるだけでいいです。工夫して実現する必要はありません。上のnewは、私が例を作って見せただけです。
この状況に基づいて、私達は抽象的な種類を使って抽象的なinstrumentとプレーすればいいです。このようにして実現する時間を省くことができ、またこの継承と今後の話をするインターフェースによって多状態を実現することもできます。
package com.ray.ch07;

public class Test {
	public void tune(Instrument instrument) {
		instrument.Play();
	}

	public void tune(Instrument[] instruments) {
		for (int i = 0; i < instruments.length; i++) {
			tune(instruments[i]);
		}
	}

	public static void main(String[] args) {
		Test test = new Test();
		// Instrument instrument = new Instrument();//error
		Wind wind = new Wind();
		Bass bass = new Bass();
		Instrument[] instruments = { wind, bass };
		test.tune(instruments);
	}
}

abstract class Instrument {
	public abstract void Play();
}

class Wind extends Instrument {
	@Override
	public void Play() {
		System.out.println("wind play");
	}
}

class Bass extends Instrument {
	@Override
	public void Play() {
		System.out.println("bass play");
	}
}
ほとんどの状況は上に展示されているように、Instrumentは抽象的なクラスとしてだけで、プレイという方法も抽象的に出てきて、サブクラスは必ずそれを実現して、直接にInstrumentを使ってこれらのサブクラスを指すことができます。
また、コードの上から見られます。Instrumentはnewではいけません。
まとめ:この章では、抽象類と抽象的な方法について簡単に議論しました。
この章はここまでです。ありがとうございます。
----------------------------
目次