我对多态概念感到困惑。请任何人都可以帮助我。这是一个简单的代码
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();
}
}
开/p: 2 A的显示方法 2 B的显示方法
理解部分:首先声明“A”类型的引用变量“a”,它引用“A”的对象。当程序打印“ai”时,它会打印 A 的变量“i”,当 display 被调用为 a.display() 时,它会调用 A 类的 display。到这里为止都很好
问题部分:现在,当我分配 B 类型的引用变量“a”对象并打印 ai 时,它仍然会从 A 类(即 2)中打印“i”值。但是当我将显示函数称为 a.display() 时,它会调用方法“B”的显示
我的研究:每当我们使用引用变量访问成员变量时,都会检查引用变量的类型以访问它。当我们使用引用变量调用方法时,对象类型在运行时被评估(我认为这被称为多态性)并且根据对象类型调用特定的方法
我是对的还是涉及其他一些概念?而且我也想详细了解一下什么是多态性及其应用。如果你能向我推荐一些关于 OOP 和 java 基本概念的书,我会很高兴的