我有三个班级:A,B,Main。 Main类扩展了A类,B扩展了Main。
A
class A{
ArrayList<ABC> arr= new ArrayList<>();
void addData(){
a();
}
void add(){
ABC abc1 = new ABC("qwer", "qwer", "qwer", 4, 1, "qweqw", "qweqwe");
ABC abc2 = new ABC("qwer", "qwer", "qwer", 4, 1, "qweqw", "qweqwe");
arr.addAll(Arrays.asList(abc1,abc2));
}
}
MAIN
class Main extends A{
public static void main(String[] args) throws Exception{
A a = new A();
a.add();
B b = new B();
b.choose();
}
}
乙
class B extends Main{
Main m = new Main();
void choose() throws Exception {
System.out.println(m.arr.size());
}
}
但是,扩展似乎不适用于B类。当检查B类的数组大小时,它返回0而不是Main上添加的2个条目。
我是否误解了继承是如何工作的还是代码本身有问题?
答案 0 :(得分:2)
您正在创建两个实例,一个是类A
,另一个是类B
。在创建B
的实例时,您还会创建另一个Main
实例,作为B
(Main m = new Main();
)的实例变量。
然后,您仅针对第一个实例add
致电a.add()
,因此List
访问b.choose()
即List
Main
m.arr.size()
实例(因为您调用ArrayList<ABC> arr
)是空的。
这与“继承如何工作”无关。它与实例变量有关,例如您的<PrivateRoute>
包含类的不同实例(对象)的不同值。
答案 1 :(得分:0)
Main m = new Main();
class B
中的此代码只会创建Main class
的对象。在此之后,您需要调用它来填充arrayList
。
m.add()