有人能告诉我这段代码有什么问题吗?
public abstract class BoardTestBean{
protected String month;
protected String day;
protected String name;
public String getMonth() {
return month;
}
public void setMonth(String month) {
this.month = month;
}
public String getYear() {
return day;
}
public void setYear(String day) {
this.day = day;
}
public String getName(){
return name;
}
//Classes
public class SAT {
boolean pre2005=false;
private String verbal;
private String quantitative;
private String writing="";//if pre-2005, do not set. It is not used.
public SAT() {
super();
if(pre2005)
name="SAT (pre 2005)";
else
name="SAT";
}
public SAT(String verbal, String quantitative, String writing) {
super();
this.verbal = verbal;
this.quantitative = quantitative;
if(writing!=null && !writing.isEmpty())
this.writing = writing;
else
pre2005=true;
if(pre2005)
name="SAT (pre 2005)";
else
name="SAT";
}
public String getVerbal() {
return verbal;
}
public void setVerbal(String verbal) {
this.verbal = verbal;
}
public String getQuantitative() {
return quantitative;
}
public void setQuantitative(String quantitative) {
this.quantitative = quantitative;
}
public String getWriting() {
if(!this.pre2005)
return writing;
else
return "";
}
public void setWriting(String writing) {
this.writing = writing;
}
public boolean isPre2005() {
return pre2005;
}
public void setPre2005(boolean pre2005) {
this.pre2005 = pre2005;
}
}
}它不停地说:
不可以访问AddBoardTestCommand.BoardTestBean类型的封闭实例。必须用AddBoardTestCommand.BoardTestBean类型的封闭实例来限定分配(例如,x.new A(),其中x是AddBoardTestCommand.BoardTestBean的实例)。
当我尝试这样做时: SAT bean = new ();将SAT导入为AddBoardTestCommand.BoardTestBean.SAT
我不明白为什么当BoardTestBean类是抽象的时候,它要求我初始化它。它只是保存几个子类的值(SAT不是唯一的子类。为了简单起见,我省略了其他部分)。
有人能告诉我怎么回事吗?谢谢。
发布于 2012-03-29 18:46:46
这是因为SAT类是BoardTestBean的内部类,而不是静态的内部类。只有静态内部类可以实例化,而不需要“封闭”实例上下文;非静态类需要“父”实例。
如果SAT不需要使用BoardTestBean的任何状态,则声明它为static;否则,向BoardTestBean添加实例方法并从那里实例化SAT。
我假设您是从同一个包访问SAT,因为它具有包的可见性。如果这不是有意的,那么您也需要使类public。
编辑这是如何将实例方法添加到BoardTestBean返回SAT
SAT makeSAT() {
return new SAT();
}现在,在BoardTestBean之外,您可以这样做:
// assuming that you have an instance of BoardTestBean...
BoardTestBean myBean = ...
BoardTestBean.SAT = myBean.makeSAT();发布于 2012-03-29 18:48:23
您定义了一个内部类,它将此隐藏到其外部类中。
就这么做
public static class SAT {然后得到一个嵌套类,而不是隐藏的
https://stackoverflow.com/questions/9931479
复制相似问题