【问题标题】:Java Inheritance not workingJava继承不起作用
【发布时间】:2018-05-24 16:03:46
【问题描述】:

我有三个班级:A、B、Main。 Main 类扩展 A 类,B 类扩展 Main。

一个

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));
    }
}

主要

class Main extends A{
    public static void main(String[] args) throws Exception{
        A a = new A();
        a.add();
        B b = new B();
        b.choose();
    }
}

B

class B extends Main{
    Main m = new Main();
    void choose() throws Exception {
        System.out.println(m.arr.size());
    }
}

但是extends似乎对B类不起作用。在检查B类的数组大小时,它返回0而不是在Main上添加的2个条目。

是我误解了继承的工作原理还是代码本身有问题?

【问题讨论】:

    标签: java class oop object inheritance


    【解决方案1】:

    您正在创建两个实例,一个是 A 类,另一个是 B 类。并且在创建B 的实例时,您还创建了Main 的另一个实例,作为B (Main m = new Main();) 的实例变量。

    然后你只为第一个实例(a.add())调用add,所以调用b.choose()访问的List,也就是Main实例的List(因为你调用m.arr.size()) 为空。

    这与“继承如何工作”无关。它与实例变量有关,例如您的 ArrayList&lt;ABC&gt; arr 包含您的类的不同实例(对象)的不同值。

    【讨论】:

    • 非常感谢您解释问题所在! :)
    【解决方案2】:
     Main m = new Main();
    

    class B 中的这段代码将简单地创建一个Main class 的对象。在此之后,您需要调用它来填写arrayList

       m.add()
    

    【讨论】:

    • 谢谢!我接受了你的回答,因为它有助于解决问题。
    猜你喜欢
    • 2015-03-04
    • 2012-06-04
    • 2013-04-24
    • 1970-01-01
    • 1970-01-01
    • 2017-05-11
    • 2011-03-09
    • 2016-08-28
    • 2010-10-05
    相关资源
    最近更新 更多