public class A{...............}public class B extends A{..................public void test{
System.out.println(getClass().getName());
System.out.println(super.getClass().getName());}
}第二个输出语句为什么也输出的是子类的类名?
麻烦高手给解决一下,谢谢
System.out.println(getClass().getName());
System.out.println(super.getClass().getName());}
}第二个输出语句为什么也输出的是子类的类名?
麻烦高手给解决一下,谢谢
package csdn.javase.inherit.ex1;class ClassA {}
package csdn.javase.inherit.ex1;
/**
*
* @author supercodingman
* @version 1.0
*
*/
public class ClassB extends ClassA{
public static void main(String[] args){
ClassB b = new ClassB();
b.showA(b);
}
public void showA(ClassB b){
System.out.println(b.getClass().getName());
System.out.println(b.getClass().getSuperclass().getName());
}
}/**output
csdn.javase.inherit.ex1.ClassB
csdn.javase.inherit.ex1.ClassA
*/
分析如下:java所有的类都继续Object类,所以在没有重写getClass()方法的情况下,我们调用getClass()方法都是调用了Object的getClass()方法,你这里就是属于这一种情况;所以不管是"getClass().getName();"还是"spuer.getClass().getName();"都是调用了Object的getClass().getName();所以打印的结果一样。
class A
{
public A()
{
System.out.println(getClass().getName());
}
}public class B extends A
{
public B( )
{
System.out.println(getClass().getName());
}
public static void main(String args[])
{
new A();
new B();
}
}运行结果:
A
B
B第一个A是“new A(); ”的结果
两个B是“new B();"的结果(先调用A类的构造函数,在调用B类的构造函数)结合API文档:getClass()的作用是 “返回此 Object 的运行时类” 这样,结果可得到合理的解释。
一个Java程序里有两个public的类显然是不对的,编译都通不过
super的意思是引用父类的方法或数据。
super.getClass()并不是new A().getClass()
而是B调用A的getClass()方法,这个方法A和B都是继承自Object的,且不能覆写。
所以当然结果是B而不是A。