正如标题所说一个在继承变量,我试图做这样的事情:访问从匿名类在Java中
public abstract class ClassA{
private String var;
...
protected void setVar(String var){
this.var = var
};
protected String getVar(){
return this.var
};
}
public class ClassB extends ClassA{
public ClassB(...){
object.setListener(new Listener(){
@Override
public void onItemSelected(data ...){
// Would like to do:
var = data;
// BUT:
// CANT CALL VAR since its a private String of Class A
// CANT CALL setVar(data) since it will end up looping
// CANT CALL super.setVar(data) since super dosn't point to ClassA in here
};
});
}
@Override
protected void setVar(String var){
super.setVar(var);
// DO MORE STUFF WHICH WILL CALL THE LISTENER
};
}
当然,我可以让VAR公众,但是这不是我想要的! var应该保持保护,只能使用setter来进行更改。
有没有办法?
你为什么不能打电话SETVAR? – 2012-01-18 20:39:58
,因为setVar会调用ClassB的setVar方法。如果你看看我在ClassB中的setVar中写的评论,你会发现确实会调用super.setVar,因此在ClassA中设置var,但从ClassB中设置setVar会执行一些操作,导致onItemSelected监听器被调用,然后调用setVar再次ClassB等等。你最终会循环。我唯一看到这个问题并保持var private的唯一机会是对ClassB中调用super.setVar的方法使用不同的方法名称。但这有点难看。 – masi 2012-01-19 11:31:47