Java继承不起作用

时间:2017-12-11 06:50:02

标签: java class oop object inheritance

我有三个班级: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个条目。

我是否误解了继承是如何工作的还是代码本身有问题?

2 个答案:

答案 0 :(得分:2)

您正在创建两个实例,一个是类A,另一个是类B。在创建B的实例时,您还会创建另一个Main实例,作为BMain 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()