Getting the name of a sub-class from within a super-class
Don't make the method static. The issue is that when you invoke getClass()
you are calling the method in the super class - static methods are not inherited. In addition, you are basically name-shadowing Object.getClass()
, which is confusing.
If you need to log the classname within the superclass, use
return this.getClass().getName();
This will return "Entity" when you have an Entity
instance, "User" when you have a User
instance, etc.
Not possible. Static methods are not runtime polymorphic in any way. It's absolutely impossible to distinguish these cases:
System.out.println(Entity.getClass());System.out.println(User.getClass());
They compile to the same byte code (assuming that the method is defined in Entity
).
Besides, how would you call this method in a way where it would make sense for it to be polymorphic?
This works for me
this.getClass().asSubclass(this.getClass())
But I'm not sure how it works though.