例如以下两行代码:
Object obj = newString();
System.out.println(obj.getClass());
按我的理解因为getClass是final函数,所以上面应该输出java.lang.Object
没想到输出的是java.lang.String
这样看来getClass既是一个final函数,又是一个虚函数,这不是矛盾了吗?
-->
首先getClass是个final,它不可能重写其次getClass是个native的方法具体实现是基于原生的本地类方法,源码中并没有体现.我的猜想本地方法中一定是读取了当前对象的类信息。
public static void main(String[] args) throws IOException {
B b=new B();
b.echo();
}
static class A{
private String test;
public A() {
test="a";
}
public final void echo(){
System.out.println(this.test);
}
}
static class B extends A{
public B() {
super.test="b";
}
}
就好比上面这个代码片段 ,你可以把test当成类信息,而echo当成这个getClass的过程,虽然B类
没有重写echo,但还是返回了b