G'day люди,
Я чувствую смущение, задавая такой наивный вопрос.Но я не могу понять одну вещь, у меня есть такая структура наследования,
B расширяет A, код, который я написал, как показано ниже,
Класс A
public class A{
private int pos = 0;
public A(){
this.pos = 12;
}
public int getPos(){
return this.pos;
}
}
Класс B
public class B extends A{
int spec = 15;
public B(){
super();
}
public int getSpec(){
return this.spec;
}
}
И у меня есть еще один класс для тестирования, который поставит нас на мой вопрос.
Class Test
import java.util.*;
public class Test{
public static void main(String[] args){
B a = new B();
ArrayList<A> c = new ArrayList<A>();
c.add(a);
System.out.println(c.get(0).getPos());
System.out.println(c.get(0).getSpec());
}
}
Вопрос: Сейчас я создаю экземпляр B, что означает, что я могу получить доступ к методу моего родительского класса getPos()
и к собственному Bметод getSpec()
.Но если я создаю ArrayList с типом A (... B тоже относится к типу A, поскольку он расширяет A ...) и добавляю экземпляр моего B, он теряет способность обращаться к своему собственному методу.Что я делаю неправильно?Приводит ли реализация ArrayList мой B к A внутри?
Примечание. Основное понимание наследования заключается в том, что родитель не может получить доступ к дочернему методу, за исключением случаев, когда он защищен.Но Child может получить доступ к методу своего родительского класса.