如何在没有子类访问Java的计数器的情况下为父类设置计数器?

时间:2013-09-25 21:05:10

标签: java inheritance static subclass super

我有以下代码,我有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

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);
    }
}