我有以下代码,我有static counter field
来跟踪创建了多少Parent
个对象。当我创建我的子类的实例时,parent
的计数器也会增加,我不想发生这种情况。有什么帮助吗?
这是代码
class Parent1 {
private String name;
private int id;
public static int count=0;
public Parent1(String name, int id){
this.name=name;
this.id=id;
count++;
}
}
class Child1 extends Parent1{
private int age;
public Child1(String name, int id, int age){
super(name, id);
this.age=age;
}
}
public class App {
public static void main(String[] args){
Parent1 par= new Parent1("aa",5);
Parent1 par2=new Parent1("bb",10);
System.out.println(Parent1.count);
Child1 chi1= new Child1("aa",5,4);
Child1 chi2=new Child1("bb",5,10);
System.out.println(Child1.count);
}
}
The output is
2
4
答案 0 :(得分:4)
在Parent1
的构造函数中:
if (getClass() == Parent1.class) // <--
count++;
答案 1 :(得分:3)
这样做:
class Parent1 {
private String name;
private int id;
public static int count=0;
public Parent1(String name, int id) {
this(name, id, true);
}
protected Parent1(String name, int id, boolean incrementCount){
this.name=name;
this.id=id;
if( incrementCount )
count++;
}
}
class Child1 extends Parent1{
private int age;
public Child1(String name, int id, int age){
super(name, id, false);
this.age=age;
}
}
//....
Parent1 par= new Parent1("aa",5);
Parent1 par2=new Parent1("bb",10);
答案 2 :(得分:0)
将count--;
添加到子类构造函数。
答案 3 :(得分:0)
您可以使用以下模式来解决问题。
class Parent1 {
private String name;
private int id;
public static int count=0;
public Parent1(String name, int id){
this(name,id,true);
count++;
}
public Parent1(String name, int id,boolean noIncrement){
this.name=name;
this.id=id;
}
}
class Child1 extends Parent1{
private int age;
public Child1(String name, int id, int age){
super(name, id,true);
this.age=age;
}
}
public class App {
public static void main(String[] args){
Parent1 par= new Parent1("aa",5);
Parent1 par2=new Parent1("bb",10);
System.out.println(Parent1.count);
Child1 chi1= new Child1("aa",5,4);
Child1 chi2=new Child1("bb",5,10);
System.out.println(Child1.count);
}
}