黑马程序员技术交流社区
标题:
关于super的问题
[打印本页]
作者:
陈汉帆
时间:
2012-3-19 15:43
标题:
关于super的问题
class Super{
}
public class Test extends Super{
public static void main(String[] args) {
new Test().test();
}
public void test(){
System.out.println(super.getClass().getName());
}
}
运行结果是:Test
super不是代表父类对象吗,为什么返回却是子类名?
作者:
马云
时间:
2012-3-19 15:57
Class 类的实例表示正在运行的 Java 应用程序中的类和接口
无论你调用的是什么,返回的是正在运行类的类名字 。你用super是实现了多态(父类的方法调用的)返回的还是当前运行类的类名字
作者:
李创
时间:
2012-3-19 15:58
getClass()
返回此 Object 的运行时类
getSuperclass()
返回表示此 Class 所表示的实体(类、接口、基本类型或 void)的超类的 Class。
class Super{
}
public class Test extends Super{
public static void main(String[] args) {
new Test().test();
}
public void test(){
//可以改成这样
System.out.println(super.getClass().getSuperclass().getName());
}
}
作者:
朱亚安
时间:
2012-3-19 16:46
在test方法中,直接调用getClass().getName()方法,返回的是Test类名
由于getClass()在Object类中定义成了final,子类不能覆盖该方法,所以,在
test方法中调用getClass().getName()方法,其实就是在调用从父类继承的getClass()方法,等效于调用super.getClass().getName()方法,所以,super.getClass().getName()方法返回的也应该是Test。
如果想得到父类的名称,应该用如下代码:
getClass().getSuperClass().getName();
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2