Best way to determine if the constructor is being invoked because of derived class instance creation

Suppose I have two classes A and B where B extends A. When I create an instance of B , constructors of both A and B get invoked. What is the best way to determine if the constructor of A is being invoked when instance B is being created?

I did something like below but it does not look very aesthetic. I am using getClass(), is there a better approach? I am actually trying to count instances of both A and B.

public class A {
    private static int counter = 0;

    public A() {
        if (this.getClass().getName().equals("A")) {
            counter++;
        }
    }

    public static void main(String[] args) {
        A a = new B();
        A a1 = new A();
        A a2 = new B();
        System.out.println(A.getCount());
        System.out.println(B.getCount());
    }

    public static int getCount() {
        return counter;
    }
}

class B extends A {
    private static int counter = 0;

    public B() {
        counter++;
    }

    public static int getCount() {
        return counter;
    }
}

Outputs

1
2
Jon Skeet
people
quotationmark

Well it would be better to avoid checking the name:

if (this.getClass() == A.class)

Beyond that, you could consider using a protected constructor - but that would still be accessible within the same package.

Normally, the best solution is not to need this anyway - if your design really needs to know whether the object you're constructing is "just an A" or an instance of a subclass, then the above test represents that condition very clearly... but it's an odd requirement to start with.

people

See more on this question at Stackoverflow