Nac*_*cht 3 java subclass object abstract
谁能告诉我这段代码有什么问题?
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;
}
}
}
Run Code Online (Sandbox Code Playgroud)
它一直在说:
不能访问类型为AddBoardTestCommand.BoardTestBean的封闭实例.必须使用AddBoardTestCommand.BoardTestBean类型的封闭实例限定分配(例如,xnew A(),其中x是AddBoardTestCommand.BoardTestBean的实例).
当我尝试这样做时:SAT bean = new SAT(); 以SAT导入为AddBoardTestCommand.BoardTestBean.SAT
我不明白为什么它要求我在BoardTestBean抽象时初始化类.它只是为几个子类保存值(SAT不是唯一的子类.为简单起见,我只省略了其他子类).
谁能告诉我什么是错的?谢谢.
这是因为SAT类是内部类的BoardTestBean,但不是一个静态内部类.只有静态内部类才能在没有"封闭"实例上下文的情况下实例化; 非静态需要一个"父"实例.
如果SAT不需要使用任何BoardTestBean状态,请声明static; 否则,添加一个实例方法BoardTestBean并SAT从那里实例化.
PS我假设您正在SAT从同一个包中访问,因为它具有包可见性.如果这不是故意的,那么你也需要上课public.
编辑这是添加实例方法BoardTestBean返回的方法SAT:
SAT makeSAT() {
return new SAT();
}
Run Code Online (Sandbox Code Playgroud)
现在外面BoardTestBean你可以做到这一点:
// assuming that you have an instance of BoardTestBean...
BoardTestBean myBean = ...
BoardTestBean.SAT = myBean.makeSAT();
Run Code Online (Sandbox Code Playgroud)