天真的inheritance问题 – Java

G’day人,

问这样一个天真的问题让我感到尴尬。 但我无法理解一件事,我有这样的inheritance结构,

在此处输入图像描述

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级考试

 import java.util.*; public class Test{ public static void main(String[] args){ B a = new B(); ArrayList c = new ArrayList(); c.add(a); System.out.println(c.get(0).getPos()); System.out.println(c.get(0).getSpec()); } } 

问:现在我正在创建一个B实例,这意味着我可以访问我父类的方法getPos()和B自己的方法getSpec() 。 但是如果我创建一个类型为A的ArrayList(… B也是类型A,因为它扩展了A …)并添加了我的B实例,它就失去了访问它自己的方法的能力。 我究竟做错了什么? ArrayList实现是否在内部将我的B转换为A?


注意:我对inheritance的基本理解是父级不能访问子级方法,除非它们受到保护。 但Child可以访问其父类的方法。