问答详情
源自:9-7 Java 中的 super 的使用

super的问题

class A
{
	public String name = "01";
}

class B extends A
{
	public String name = "02";

	public void testM()
	{
		//System.out.println(this.name + "," + super.name);
		System.out.println(this.getClass().getSimpleName() + "\n" + super.getClass().getSimpleName());
	}
}

class ThisSuper
{
	public static void main(String[] args)
	{
		B b = new B();
		b.testM();
	}
}

输出结果:

B
B

super既然指向子类的父类引用,为什么程序打印出子类呢?

提问者:wangyt 2015-07-07 12:26

个回答

  • wangyt
    2015-07-07 14:18:50

    不管是this.getClass()还是super.getClass(),最终都指向了Object对象的getClass(),这个方法是final的不能被子类重写。根据API定义,getClass()返回对象在运行时的类型,运行时的类型是B,所以返回类型也是B。


  • 流芒阿
    2015-07-07 13:29:39

    this指当前类 是锁定了其他对象的   而且你这里是找的类名的嘛     你想找里面的常量是不  你找name就不一样了 少年

  • long1226230
    2015-07-07 13:15:34

    getClass

    public final Class<? extends Object> getClass()

    返回一个对象的运行时类。该 Class 对象是由所表示类的 static synchronized 方法锁定的对象。

    返回:

    表示该对象的运行时类的 java.lang.Class 对象。此结果属于类型 Class<? extends X>,其中 X 表示清除表达式中的静态类型,该表达式调用 getClass。

    那意思就是获取到的是正在运行时的类文件名。此时运行的只有B类!