G'day people、ナイーブ継承問題 - Java
このような素朴な質問をして困っています。しかし、私は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;
}
}
私はもう一つのクラスをテストしています。それで私は私の質問に繋がります。
クラス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()
にアクセスできることを意味します。しかし、タイプAのArrayListを作成した場合(... BもタイプAなので...)、自分のメソッドにアクセスする能力が失われてしまいます。私は間違って何をしていますか? ArrayList実装はBを内部的にAにキャストしていますか?
注:継承の私の基本的な理解は、彼らが保護されていない以外 子供のメソッドにアクセスすることができ、親です。しかし、子は親クラスのメソッド にアクセスできます。
+1です。そして、 'A'は今抽象クラスにする必要があることを忘れないでください。 –
@Kublai Khan、+1大きなポイント!ありがとうございました。 :D – mre