为了账号安全,请及时绑定邮箱和手机立即绑定

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既然指向子类的父类引用,为什么程序打印出子类呢?

正在回答

3 回答

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


1 回复 有任何疑惑可以回复我~

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

0 回复 有任何疑惑可以回复我~

getClass

public final Class<? extends Object> getClass()

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

返回:

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

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

0 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消
Java入门第二季 升级版
  • 参与学习       530631    人
  • 解答问题       6091    个

课程升级!以终为始告别枯燥,在开发和重构中体会Java面向对象编程的奥妙

进入课程

super的问题

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信