黑马程序员技术交流社区

标题: 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
  1. public  class Test extends Date{
  2.         public static void main(String[] args) {
  3.                 new Test().test();
  4.         }
  5.         
  6.         public void test(){
  7.                 System.out.println(super.getClass().getName());
  8.         }
  9. }
复制代码
你声明了一个子类的对象,但是在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()。
具体代码:
  1. import java.util.Date;

  2. public class Test extends Date{
  3. public static void main(String[] args) {
  4. new Test().test();
  5. }

  6. public void test(){
  7. System.out.println(this.getClass().getSuperclass());
  8. // System.out.println(super.getClass().getName());Test.getClass().getSuperClass()
  9. }
  10. }
复制代码

作者: 张雪萍    时间: 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