これだけじゃ、確かにわかりづらいかも...
抽象クラスっていうのは、abstract を使っているクラスのこと。
多様性は 英語だと Polymorphism ( ポリモーフィズム ) です。
特に親クラス型 ( またはインターフェース型 )として受け取った場合のイメージでしょうか。
普通は、
クラス名 オブジェクト名 = new クラス名();
となりますが、
TestA を継承し、TestA1, TestA2, TestA3 を定義した場合は、
TestA obj = new TestA1();
みたいにすることも可能です。
たとえば、
ユーザ入力の値によって生成するオブジェクトを変えるとします。
1 なら TestA1 の、2 なら TestA2 の... という具合に。
その場合、すべて最初から生成するという方法もありますが、
その分メモリを食うので、不要なオブジェクトは作らないとします。
そうすると、
// もし 1 なら
obj = new TestA1();
// もし 2 なら
obj = new TestA2();
みたいにしようとします。
JavaScriptやVBA 等のように、型があって無いような言語ならいいですが、
Java, C#, C/C++ は型が厳格です。
なので、型を決める必要がありますね。
なので、
親クラスの Testクラスを受け皿として、
Test obj = new TestA1();
のようにします。
たとえば、
Java
1// int a にユーザ入力の値が入っているとして
2
3Test obj;
4
5if( a == 1 ){
6 obj = new TestA1();
7}else if( a == 2 ){
8 obj = new TestA2();
9}else ...
という感じに。
で、親クラス ( 抽象クラス ) である Testクラス にある メソッドを使うことができます。
もし子クラスで再定義されているならそれを...という感じで。
ひとつのメソッドでも、そのオブジェクトがどのクラスから生成されたかによって
変化します。
これのことだと思いますよ?
間違っていたらすみません。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。