多様性について勉強します。
正直、なにがなんだかよくわかりませんが、オブジェクト指向ではよく登場するようです。
言葉の意味では、以下のような要約になります。
オブジェクト指向での多様性とは、サブクラスのインスタンスを、スーパークラスのインスタンスのように使うことといいます。
例えばこれまで書いてきた以下のようなテストコードがあるとすると、サブクラスのインスタンスを作った後に、そのインスタンスをもとに、スーパークラスの型の変数に代入することができます。
TestClassChild tcc = new TestClassChild(); TestClassParent tcp = tcc;
上記のtcpから、スーパークラスのフィールドやメソッドが呼び出すことができます。(tccも通常どおり使うことができる)
このような使い方を多様性(ポリモルフィズム)と呼ぶようです。
このあたりは実践で使ってみないとピンとこないかもしれません。
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"); } }