首页 > 试题广场 >

下列代码的输出结果是什么。

[单选题]
说明输出结果。
import java.util.Date;  
public class SuperTest extends Date{  
    private static final long serialVersionUID = 1L;  
    private void test(){  
       System.out.println(super.getClass().getName());  
    }  
     
    public static void main(String[]args){  
       new SuperTest().test();  
    }  
}  

  • SuperTest
  • SuperTest.class
  • test.SuperTest
  • test.SuperTest.class
推荐
C.
TestSuper和Date的getClass都没有重写,他们都是调用Object的getClass,而Object的getClass作用是返回的是运行时的类的名字。这个运行时的类就是当前类,所以
super.getClass().getName()
返回的是test.SuperTest,与Date类无关
要返回Date类的名字需要写super.getClass().getSuperclass()
编辑于 2016-01-22 11:32:59 回复(35)
1.首先 super.getClass() 是父类的getClass()方法,其父类是Date,它的getClass()方法是继承自Object类而且没有重写,
所以就是调用object的getClass()方法。而看一下getclass的方法解释如下图

所以可以知道是返回当前运行时的类。

2.在调用getName()方法而getName()是:包名+类名

发表于 2016-07-22 11:41:18 回复(20)
super.getClass().getName()
返回:包名+类名

发表于 2016-02-10 23:54:10 回复(17)
解题要点:
1、super.getClass()调用的是父类即Date类的方法;
2、父类的getClass方法继承自Object类,且该方法是final的,不能被修改;
3、Object中的getClass()返回的是当前运行的类,即SuperTest;
4、Class中的getName()方法针对引用类型的返回的是包名+类名,即test.SuperTest;
5、如果想要返回父类,即Date的名称,可以使用super.getClass().getSuperClass().getName();
6、此处super还是this,亦或直接getClass().getName(),结果都是一样的;
发表于 2016-10-14 19:40:23 回复(11)
super.getClass() 得到的依然是runtime当前类,若要得到真正的父类,需要用super.getClass().getSuperclass()
虽然这里写的是super,但其实用this也一样

选C
编辑于 2015-03-24 13:46:56 回复(8)
此题有异议,没有指定在哪个包下
如果默认是在test包下,我也可以默认为在  TTTT  包下
发表于 2021-09-28 21:04:07 回复(3)
第一:不管是TestSuper的getClass()还是Date的getClass(),他们都是非覆盖式的从Object继承来的。

第二: Object的getClass()方法的释义是: 返回此 Object 的运行时类。返回的 Class 对象是由所表示类的 static synchronized 方法锁定的对象。

    /**
     * Returns the runtime class of this {@code Object}. The returned
     * {@code Class} object is the object that is locked by {@code
     * static synchronized} methods of the represented class.
     **/

     释义指出,要返回此Object运行时类,这外当然不可能指Object自己了,否则所有类调用getClass()方法都返回Object.class了。

    那到底谁是Object的运行时类呢,不是Object自己,当然就只能是他的儿子、或各种孙子了,到底是谁呢,举个例子:
    Date作为直接继承Object的类,作为Object的儿子,如果调用Date.getClass(),返回的是什么呢?在Date中,无论 是this.getClass()还是super.getClass(),毫无疑问都指向了Object.getClass()。根据上一段解 释,Object.getClass()返回不可能是Object.class,那没得说,只能是Date.class了。

     根据上段: new Date()时,Date是Object的运行时类。

     同理: 根据代码,new TestSuper()时,运行是类不可能是TestSuper他老子Date,更不会他各种老老子(如Object),只能是自己。

    再回到Object.getClass()释义,返回的只能是TestSuper

第三:如果想要从TestSuper中得到Date.class,可以用TestSuper.getClass().getSuperClass();
发表于 2016-03-07 18:33:39 回复(1)
我不知道我哪错了,题目是没有包名的
发表于 2022-01-01 11:12:59 回复(3)
xyw头像 xyw
原题中是有package test;的。关于java中不带package和带package的编译运行方式可以参考http://blog.csdn.net/com_stu_zhang/article/details/25112591


发表于 2015-08-27 22:02:08 回复(1)
要明确super.getClass()的对象是运行时类(runtime的)也就是实例化的那个类
SuperTest,而不是Date 带上包名 选C
编辑于 2015-08-20 11:52:32 回复(0)
Date
发表于 2015-01-10 12:59:08 回复(0)
大哥们是怎么看出这个类在test包下的?上面都没有package关键字
发表于 2021-11-10 07:17:21 回复(3)
前面的test是包名,因为类在包名下,所以输出为
test.SuperTest
发表于 2015-11-13 21:53:33 回复(2)
super.getClass() 得到的依然是runtime当前类,若要得到真正的父类,需要用super.getClass().getSuperclass()
虽然这里写的是super,但其实用this也一样
 
选C
发表于 2015-10-27 12:05:31 回复(0)
C:super.getClass() 获取SuperTest Class
发表于 2015-01-03 22:10:28 回复(0)
getClass()返回的是包名+类名。 super.getClass()返回的是父类的,但是date没有重写,所以调用object的getClass()方法,即返回当前对象的类。
发表于 2020-09-08 08:03:26 回复(0)

这tm选项要是有个Date,我绝逼选错!

发表于 2018-08-09 16:14:04 回复(1)
由于Object类里面的getClass()是final修饰的,此方法不能被继承,执行语句super.getClass()就相当于直接执行Object类里面的getClass()方法,而Object里面的getClass()方法作用是返回的是运行时的类的全限定名(包名.类名),所以返回的是test.SuperTest,与Date类无关,要返回Date类的名字需要写super.getClass().getSuperclass()
发表于 2018-07-02 11:05:42 回复(0)

super.getClass().getName()由于没有重写,所以用的还是Object中的getClass().getName()方法:返回当前运行类的名字。所以其实用super和用this都一样。但如果要返回父类的名字就应该使用getClass().getSuperclass()。
代码如下:

package test;

import java.util.Date;

public class SuperTest extends Date{

    private static final long serialVersionUID = 1l;
    private void test() {
        System.out.println(this.getClass().getName());
        System.out.println(this.getClass().getSuperclass());
        System.out.println(super.getClass().getName());
        System.out.println(super.getClass().getSuperclass());
    }

    public static void main(String[] args) {
        new SuperTest().test();
    }

}

图片说明

发表于 2017-05-10 16:29:28 回复(0)
各位大神,咱们能就题论题么?明明没有包含package test;语句,为什么要说答案是C呢?如果你们自己在笔试的时候也会选C么?
发表于 2015-08-28 06:49:43 回复(3)
我运行了是a呀
发表于 2015-08-23 09:03:10 回复(1)