比方说,我有一个保护整数
public abstract class Super{
protected static int BASE = 1;
public int foo(){
//do some computation with BASE, e.g:
return BASE + 1;
}
}
和几个静态类从它继承:
public static abstract class Sub extends Super{
//this class should keep BASE at 1
}
static class SubSub1 extends Sub{
//this class should change BASE to 0
static{
SubSub1.BASE = 0;
}
}
static class SubSub2 extends Sub{
//this class should in effect have a BASE of 1
}
是的,这个失败。
问题很明显,因为SubSub1是一个静态类,所以如果要改变BASE,Super.BASE必须是静态的。
但是,如果Super.BASE是静态的,那么SubSub1.Base是Super.BASE。
我如何最好地实现我所要做的? (不,我不能让这些类不是静态的,并且假设有很多子类。)
我很感激帮助。
你想达到什么目的?你为什么做这个? – 2014-10-05 19:10:34
我不认为静态类是你认为他们是。任何外部类都是静态的,是默认的。静态只适用于嵌套类,其中包含对外部类的引用,除非是静态的。 – 2014-10-05 19:15:14
静态类并不意味着它的所有变量都需要是静态的。使'BASE'是非静态的。 (另外,全部大写的变量名默认意味着一个常量,这不是 - 你应该命名变量'base')。或者,您可以在基类中创建一个'protected protected int getBase()'方法,然后让子类实现它。 – yshavit 2014-10-05 19:18:04