多様性について勉強します。
正直、なにがなんだかよくわかりませんが、オブジェクト指向ではよく登場するようです。
言葉の意味では、以下のような要約になります。
オブジェクト指向での多様性とは、サブクラスのインスタンスを、スーパークラスのインスタンスのように使うことといいます。
例えばこれまで書いてきた以下のようなテストコードがあるとすると、サブクラスのインスタンスを作った後に、そのインスタンスをもとに、スーパークラスの型の変数に代入することができます。
[c]
TestClassChild tcc = new TestClassChild();
TestClassParent tcp = tcc;
[/c]
上記のtcpから、スーパークラスのフィールドやメソッドが呼び出すことができます。(tccも通常どおり使うことができる)
このような使い方を多様性(ポリモルフィズム)と呼ぶようです。
このあたりは実践で使ってみないとピンとこないかもしれません。
[c]
public class SuperClassTest3{
public static void main(String[] args) {
//オブジェクトのインスンタンスを生成する
TestClassChild tcc = new TestClassChild();
System.out.println(tcc.TestA);
System.out.println(tcc.TestB);
//tcc.PrintTextC();
//tcc.PrintTextP();
}
}
class TestClassChild extends TestClassParent
{
TestClassChild() {
//引数なしコンストラクタ用
//スーパークラスの引数なしコンストラクタを呼ぶ
super();
}
TestClassChild(int TestAA, int TestBB) {
//スーパークラスの引数つきコンストラクタを呼ぶ
super(TestAA, TestBB);
}
void PrintTextC() {
System.out.print("PrintTextC !! \n");
}
void PrintTextP() {
System.out.print("PrintTextP オーバーライドテスト !! \n");
}
}
class TestClassParent
{
int TestA = 10;
int TestB = 20;
TestClassParent(int a, int b) {
//やっていることは「setTest」メソッドを同じ
TestA = a;
TestB = b;
System.out.print("引数つきコンストラクタ !! \n");
}
TestClassParent() {
//引数なしコンストラクタ用
System.out.print("コンストラクタ !! \n");
}
void PrintTextP() {
System.out.print("PrintTextP !! \n");
}
void PrintParentTest() {
System.out.print("PrintParentTest !! \n");
}
}
[/c]