When I studied static binding, private, final, static methods use static binding.
So they use reference type but object type.
But why does getClass method returns object type, it is final method though.
<code>package BasePackage;
class A {
}
class B extends A {
}
public class project2{
public static void main(String[] args){
A a = new A();
B b = new B();
A c = new B();
Class clazz1=c.getClass();
System.out.println(clazz1.getName());
System.out.println(clazz1.getSimpleName());
System.out.println(clazz1.getPackageName());
System.out.println(clazz1.getPackage());
System.out.println(clazz1.getPackage().getName());
}
}
</code>
<code>package BasePackage;
class A {
}
class B extends A {
}
public class project2{
public static void main(String[] args){
A a = new A();
B b = new B();
A c = new B();
Class clazz1=c.getClass();
System.out.println(clazz1.getName());
System.out.println(clazz1.getSimpleName());
System.out.println(clazz1.getPackageName());
System.out.println(clazz1.getPackage());
System.out.println(clazz1.getPackage().getName());
}
}
</code>
package BasePackage;
class A {
}
class B extends A {
}
public class project2{
public static void main(String[] args){
A a = new A();
B b = new B();
A c = new B();
Class clazz1=c.getClass();
System.out.println(clazz1.getName());
System.out.println(clazz1.getSimpleName());
System.out.println(clazz1.getPackageName());
System.out.println(clazz1.getPackage());
System.out.println(clazz1.getPackage().getName());
}
}
What I expected as a result is A. Because getClass method is final method so static binding is used.
But the result is B.