ポリモヒズムの概念について混乱しています。誰でも私を助けてください。ここに簡単なコードがあります
class A {
int i=2;
void display() {
System.out.println("display method of A");
}
}
class B extends A {
int i=1;
void display() {
System.out.println("display method of B");
}
}
public class M {
public static void main(String[] arg) {
A a=new A();
System.out.println(a.i);
a.display();
a=new B();
System.out.println(a.i);
a.display();
}
}
オープ: 2 Aの表示方法 2 Bの表示方法
理解した部分: 'A' 型の参照変数 'a' が最初に宣言され、'A' のオブジェクトを参照します。プログラムが「ai」を出力すると、A の変数「i」が出力され、ディスプレイが a.display() として呼び出されると、クラス A のディスプレイが呼び出されます。ここまでは大丈夫
問題の部分: タイプ B の参照変数 'a' オブジェクトを割り当てて ai を出力すると、クラス A (つまり 2) の 'i' 値が出力されます。しかし、表示関数を a.display() として呼び出すと、メソッド 'B' の表示が呼び出されます
私の研究:参照変数を使用してメンバー変数にアクセスするたびに、参照変数のタイプがチェックされてアクセスされます。参照変数オブジェクト型を使用してメソッドを呼び出すと、実行時にオブジェクト型が評価され(これはポリモーフィズムと呼ばれると思います)、オブジェクト型に応じて特定のメソッドが呼び出されます
私は正しいですか、それとも他の概念が関係していますか? また、ポリモーフィズムとは何か、その応用についても詳しく知りたいです。また、OOP と Java の基本概念に関する本を何冊かお勧めいただければ幸いです。