我是Java的新手,我的英语不太好......所以请原谅我:)
我有一个超类:Genericresource,带有一个静态字段,用于计算创建的实例数,以及一个调用此值的方法:
public class Genericresource {
private static int counter;
public Genericresource() { counter++; }
public static int howmany() { return counter; }
//other useful code here
}
我想创建一些半完全相同的子类,每个子类用于特定的资源:
public class Type1Resource extends Genericresource {
// here specific code
}
现在,在主要课程中:
Genericresource a1 = new Genericresource();
Genericresource a2 = new Genericresource();
Type1Resource b = new Type1Resource();
Type1Resource b2 = new Type1Resource();
int howa = Genericresource.howmany();
int howb = Type1Resource.howmany();
我希望我使用两个不同的计数器静态字段,一个用于超类Genericresource,另一个用于子类Type1Resource。 我想要的结果是:howa = 2 howb = 2。 我的真实结果是:howa 4 howb 4。
所以即使我实例化了2个不同的类,我也使用相同的计数器静态字段,而我需要 我需要在不同的计数器静态字段中引用,每个子类一个,同时保持,超类的静态方法结构。 我该怎么办?
答案 0 :(得分:3)
静态变量属于class
,因此counter
和Genericresource
中引用的Type1Resource
为Genericresource.counter
(通过隐式无参数构造函数)在子类中调用),因此在每个实例的两个实例之后它的值为4
。
在static
中声明Type1Resource
计数器,如果您只想专门计算这些实例,请在特定的Type1Resource
构造函数中递增它。
为清晰起见,我建议为新计数器使用不同的名称。