我有两个文件,分别是商店中特定部门的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();
}
}
答案 0 :(得分:0)
我刚刚将其插入到IDE中,突出显示了secX.printNameArrList();
(Dept.java
中的最后一条语句)。
原因:secX
的类型为Object
,不是部分。这与可见性无关。
sectionArr
应该是Section[]
而不是Object[]
。我还相信name
中的arrList
和Section
应该不是静态的。
无论如何,这是更新的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();
。