黑马程序员技术交流社区
标题:
super调用问题
[打印本页]
作者:
郑昌奋
时间:
2013-3-14 13:15
标题:
super调用问题
public class Test extends Date{
public static void main(String[] args) {
new Test().test();
}
public void test(){
System.out.println(super.getClass().getName());
}
}
这个输出的为什么是Test啊 而不是Date呢,如果想得到Date怎么实现
作者:
丁一
时间:
2013-3-14 13:23
下次多贴点代码,方便别人阅读,谢谢
作者:
曾钦
时间:
2013-3-14 13:44
System.out.println(super.getClass().getSuperclass());
这样试试。。
作者:
黑马-李嘉欣
时间:
2013-3-14 13:47
public class Test extends Date{
public static void main(String[] args) {
new Test().test();
}
public void test(){
System.out.println(super.getClass().getName());
}
}
复制代码
你声明了一个子类的对象,但是在test方法中,却用了super,当然是代表父类的对象,然后获取类名,也当然是得到父类的名字。
super换成this试试~
作者:
猫腻
时间:
2013-3-14 13:52
楼主如果有问题请继续追问,无问题,请结贴,否则扣除技术分。
作者:
潘廖明
时间:
2013-3-14 14:03
从API里面可知道,getClass()方法是Object里面的方法,然而Object是所有类的父类。
getClass()返回此 Object 的运行时类。当new Test()的时候,运行时类,不可能是他的父类
Date,更不可能是Date的父类Object,所以super.getClass().getName()返回的只可以是JavaIO.Test。
如果你想要返回Date.class,应该这样调用Test.getClass().getSuperClass()。
具体代码:
import java.util.Date;
public class Test extends Date{
public static void main(String[] args) {
new Test().test();
}
public void test(){
System.out.println(this.getClass().getSuperclass());
// System.out.println(super.getClass().getName());Test.getClass().getSuperClass()
}
}
复制代码
作者:
张雪萍
时间:
2013-3-15 09:25
不回答了,我勒个去,噼里啪啦打了一大堆总结,突然页面被关了,气死了。不说了。
作者:
黑马17期-闫东东
时间:
2013-3-16 00:44
System.out.println(super.getClass().getSuperclass().getName());
打印:
java.util.Date
super不代表父类对象,this代表可以代表本类对象。如下例子:
lass Demo10
{
public static void main(String[] args)
{
Son f=new Son();
f.method();
}
}
class Father
{
public void show(){
System.out.println("father show");
}
}
class Son extends Father
{
public void method(){
Tools.print(super);//编译失败,而当参数为this时,编译通过程序运行。
}
public void show(){
System.out.println("son show");
}
}
class Tools
{
public static void print(Father f){
f.show();
}
}
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2