class ClassA {
String whoAmI() {
return "ClassA";
}
}
class ClassB extends ClassA{
String whoAmI() {
return "ClassB";
}
}
class Main {
public static void main(String[] args) {
ClassA obj1 = new ClassA();
ClassA obj2 = new ClassB();
System.out.println(obj1.whoAmI());
System.out.println(obj2.whoAmI());
}
}
Выход вышеуказанного кода:Java полиморфизм: Пожалуйста, помогите мне понять полиморфизм
ClassA
ClassB
В приведенном выше выводе кода, как и ожидалось, что я могу видеть методы класса «ClassB», когда я я создаю ссылочную переменную класса «ClassA» и создаю экземпляр с помощью «new ClassB();», но почему это не то же самое в случае, когда я создаю ссылочную переменную интерфейса «Список» и создавая ее с помощью своего класса реализации «ArrayList «(Я знаю, что мы не можем напрямую создавать объекты интерфейсов)?
import java.util.ArrayList;
import java.util.List;
public class Main {
public static void main(String[] args) {
List objList = new ArrayList();
objList.add("One");
objList.add("Two");
objList.add("Three");
System.out.println(objList.get(1)); // Only able to call methods of interface "List", but not methods of its implementing class "ArrayList. WHY?"
}
}
Если класс «ArrayList» реализует интерфейс «List», то почему я не могу назвать методы класса «ArrayList»?
Я знаю, что в моем сознании есть некоторое недоразумение о концепции полиморфизма. Пожалуйста, помогите мне разобраться в этом недоразумении!