使用在另一个类中实例化的对象的方法

时间:2018-08-19 19:07:27

标签: java class object methods

我有两个文件,分别是商店中特定部门的Section类和一个代表Section类集合的Dept类。在将Section对象添加到部门的sectionArr之后,我无法访问Section类的方法(例如getName()或printNameArrList())。这些方法在main中实例化时似乎可以使用,但是当我尝试使用store.sectionArr [0] .anything()

进行访问时,出现“错误:找不到符号”

Section.java

import java.util.ArrayList;
import java.util.Arrays;

public class Section {
    public static String name;
    public static ArrayList<String> arrList;

    public void setName(String text) {
        name = text;
    }

    public String getName() {
        return name;
    }

    public ArrayList getArrList() {
        return arrList;
    }

    public void printNameArrList() {
        System.out.print("The " + name + " section sells these items: ");
        for (int i = 0; i < arrList.size(); i++) {
            String value = arrList.get(i);
            System.out.print(value + " ");
        }
        System.out.println();
    }

    public static void main(String[] args) {

    }

}

Dept.java

import java.util.Arrays;
import java.util.ArrayList;

public class Dept {
    public static String name;
    public Object[] sectionArr;

    public void setName(String text) {
        name = text;
    }

    public String getName() {
        return name;
    }

    public Object[] getObjArr() {
        return sectionArr;
    }

    public void initArr(int size) {
        sectionArr = new Object[size];
    }

    public static void main(String[] args) {
        Dept store = new Dept();

        store.setName("Floyd's Floors");

        System.out.println(store.getName());

        System.out.println(store.getObjArr());

        store.initArr(3);

        System.out.println(store.getObjArr());

        Section sec1 = new Section();

        sec1.setName("Shoes");
        sec1.arrList = new ArrayList<String>();
        sec1.arrList.add("Jordan's");
        sec1.arrList.add("Rodman's");
        sec1.arrList.add("Shaq's");
        sec1.getArrList();
        sec1.printNameArrList();

        store.sectionArr[0] = sec1;

        for (int i = 0; i < store.sectionArr.length; i++) {
            System.out.println(store.sectionArr[i]);
        }

        Object secX = store.sectionArr[0];
        secX.printNameArrList();

    }


}

2 个答案:

答案 0 :(得分:0)

我刚刚将其插入到IDE中,突出显示了secX.printNameArrList();Dept.java中的最后一条语句)。

原因:secX的类型为Object不是部分。这与可见性无关。

sectionArr应该是Section[]而不是Object[]。我还相信name中的arrListSection应该不是静态的。

无论如何,这是更新的Dept类,并进行了一些改进:

import java.util.Arrays;
import java.util.ArrayList;

public class Dept {
    public static String name;
    public Section[] sectionArr;

    public void setName(String text) {
        name = text;
    }

    public String getName() {
        return name;
    }

    public Section[] getObjArr() {
        return sectionArr;
    }

    public void initArr(int size) {
        sectionArr = new Section[size];
    }

    public static void main(String[] args) {
        Dept store = new Dept();

        store.setName("Floyd's Floors");

        System.out.println(store.getName());
        System.out.println(Arrays.toString(store.getObjArr()));

        store.initArr(3);

        System.out.println(Arrays.toString(store.getObjArr()));

        Section sec1 = new Section();

        sec1.setName("Shoes");
        sec1.arrList = new ArrayList<>();
        sec1.arrList.add("Jordan's");
        sec1.arrList.add("Rodman's");
        sec1.arrList.add("Shaq's");
        sec1.printNameArrList();

        store.sectionArr[0] = sec1;

        for (int i = 0; i < store.sectionArr.length; i++) {
            System.out.println(store.sectionArr[i]);
        }

        Section secX = store.sectionArr[0];
        secX.printNameArrList();
    }
}

PS:我删除了sec1.getArrList()语句,因为它什么都不做。

答案 1 :(得分:0)

您可以在main method中的Dept class中进行以下更改:

Section secX = store.sectionArr[0];
((Section )secX).printNameArrList();

对象类是Java中所有类的父类。因此,由于covarinace,您可以在“父类”引用中保留子类对象。但是父类参考不知道子类中存在的方法,因此,您将获得compile error。因此,您可以使用((Section )secX).printNameArrList();