大家好,
问出这样幼稚的问题我感到很尴尬。但我无法理解一件事,
我有这样的继承结构,
B扩展A,我写的代码如下,
Class A
public class A{
private int pos = 0;
public A(){
this.pos = 12;
}
public int getPos(){
return this.pos;
}
}
Class B
public class B extends A{
int spec = 15;
public B(){
super();
}
public int getSpec(){
return this.spec;
}
}
我还有一堂课要测试,这会让我们回答我的问题。
课堂测试
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()
。但是,如果我创建类型 A 的 ArrayList(...B 也是类型 A,因为它扩展了 A...)并添加我的 B 实例,它就会失去访问其自己的方法的能力。我究竟做错了什么? ArrayList 实现是否在内部将我的 B 转换为 A?
注意:我对继承的基本理解是父级无法访问
孩子的方法,除非他们受到保护。但孩子可以访问他们的
父类的方法。
不涉及选角。你所做的与此没有什么不同:
A bAsA = new B():
虽然 bAsA 引用的对象实际上是 B 对象,但它由 A 变量保存,因此只有 A 方法可用(除非您将其显式转换为 B 变量)。
由于您的 ArrayList 是 A 的 ArrayList,因此 ArrayList 中的每个项目都被视为 A 变量,并且只有 A 方法可用。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)