【Java面试题】14 super.getClass()方法调用

下面程序的输出结果是多少?
import java.util.Date;
public  class Test extends Date{
    public static void main(String[] args) {
        new Test().test();
    }  

    public void test(){
        System.out.println(super.getClass().getName());
    }
}  

在test方法中,直接调用getClass().getName()方法,返回的是Test类名。由于getClass()在Object类中定义成了final,子类不能覆盖该方法,所以,在test方法中调用getClass().getName()方法,其实就是在调用从父类继承的getClass()方法,等效于调用super.getClass().getName()方法,所以,super.getClass().getName()方法返回的也应该是Test。 你可能会认为是Date,但是实际的结果是Test。没错,你没有看错,super.getClass()并不会返回超类的引用。 我们再做一个实验,在 test方法中直接调用getClass().getName()方法,则结果返回的是Test。为什么super没有起作用呢?简单来说,super并 不能代表一个超类的引用。 因为super并没有代表超类的一个引用的能力,只是代表调用父类的方法而已。 所以,在子类的方法中,不能这样用System.out.println(super);也不能使用super.super.mathod();事实上,super.getClass()是表示调用父类的方法。getClass方法来自Object类,它返回对象在运行时的类型。因为在运行时的对象类型是Test,所以this.getClass()和super.getClass()都是返回Test。 此外,由于getClass()在Object类中定义成了final,子类不能覆盖该方法,所以,在test方法中调用 getClass().getName()方法,其实就是在调用从父类继承的getClass()方法,等效于调用 super.getClass().getName()方法,所以,super.getClass().getName()方法返回的也应该是 Test。 如果想得到父类的名称,应该用如下代码: Java代码 getClass().getSuperClass().getName();

时间: 2024-12-31 04:00:05

【Java面试题】14 super.getClass()方法调用的相关文章

Java学习笔记之RMI远程方法调用

RMI 应用通常有两个分开的程序组成,一个服务端程序和一个客户端程序.一个典型的服务端程序创建一些远程对象,使得对这些远程对象的引用可以被访问,等待客户端调用这些远程对象提供的方法.一个典型的客户端程序获取远程引用,指向一个或者多个服务端上的远程对象,然后调用这些远程对象所提供的方法.通常我们称这为分布式对象应用程序. 3.1 RMI的工作方式 分布式对象应用程序需要做的事情: l 查找(定位)远程对象. 应用程序可以使用各种不同的机制取得远程对象的引用.比如应用程序可以通过 RMI 提供的简单

Java 1.18-1.22 数组及方法调用

在对数组开始认知的时候,我居然还没有熟练应用for循环,简直失败! 在认知方法调用的时候,数组的练习稍微少了点,可能接收的太快,思维暂时没跟上. 这周末,我对之前的for循环,数组进行了大量的操作并且参考各类联系,也算明白一二了,但还是不能使用的熟练,也许需要更多的时间来积累使用的经验和熟练度.continue和break的用法掌握了, 听课再多,不及自己多思考.不专研不思考,任谁也不会有所进展.尽管我零基础,但也是抱有想法的学习. 睡觉前,我又整理了一下思路,看了从头到尾的已学基础. 晚安!世

java种instanceof方法和getclass方法的区别

在比较一个类是否和另一个类属于同一个类实例的时候,我们通常可以采用instanceof和getClass两种方法通过两者是否相等来判断,但是两者在判断上面是有差别的,下面写个测试类. public class Test5 { public static void testInstanceof(Object x) { System.out.println("x instanceof Parent: "+(x instanceof Parent)); System.out.println(

java.lang.reflect.InvocationHandler中invoke()方法调用时机

Java中动态代理的实现,关键就是这两个东西:Proxy.InvocationHandler,下面从InvocationHandler接口中的invoke方法入手,简单说明一下Java如何实现动态代理的. invoke方法的完整形式如下: public Object invoke(Object proxy, Method method, Object[] args) throws Throwable       {              method.invoke(obj, args);  

java 类继承,父类子类方法调用的过程d

1.Mytank类继承tank,则Mytank里面的公有部分即public 成员和方法在Mytank中是含有的可以调用和赋值,且在MyTank中不要有新的成员变量与tank中的公有成员名称一样,这样会发生调用紊乱,如: Tank tank = new MyTank(); int c = tank.a; 若 tank类中public a= 3: Mytank子类中新定义public a = 2: 则上述代码中的调用将会使得c = 3: 用了父类中的a.

java 类继承,父类子类方法调用的过程

1.Mytank类继承tank,则Mytank里面的公有部分即public 成员和方法在Mytank中是含有的可以调用和赋值,且在MyTank中不要有新的成员变量与tank中的公有成员名称一样,这样会发生调用紊乱,如: Tank tank = new MyTank(); int c = tank.a; 若 tank类中public a= 3: Mytank子类中新定义public a = 2: 则上述代码中的调用将会使得c = 3: 用了父类中的a.

java --面试题大全

        J2EE面试题   文档版本号:V2.0                   2016年11月 目 录 1. Java基础部分 8 1.1. 一个".java"源文件中是否可以包括多个类(不是内部类)?有什么限制? 8 1.2. Java有没有goto? 8 1.3. 说说&和&&的区别. 8 1.4. 在JAVA中如何跳出当前的多重嵌套循环? 8 1.5. switch语句能否作用在byte上,能否作用在long上,能否作用在String上?

java笔试题(4)

abstract的method是否可同时是static,是否可同时是native,是否可同时是synchronized? abstract的method 不可以是static的,因为抽象的方法是要被子类实现的,而static与子类扯不上关系! abstract的method 不可以是native的,native方法表示该方法要用另外一种依赖平台的编程语言实现的,不存在着被子类实现的问题,所以,它也不能是抽象的,不能与abstract混用.例如,FileOutputSteam类要硬件打交道,底层的

Java面试题集(一)

作为一名java开发软件工程,一定要记住,基础非常重要,往往就是一些基础,很简单,但是你就是不知道实现原理,为什么使用,有没有自己去发现,对比,差异从而总结,有些东西看似简单,但是不一定你描述清楚,直观,简洁,故要要坚持在每天闲暇之余学习其中几道题目,日积月累,等到出去面试时,一切都水到渠成,面试时就自然会游刃有余了. 答题时,先答是什么,再答有什么作用和要注意什么(这部分最重要,展现自己的心得) 答案的段落分别,层次分明,条理清晰都非常重要,从这些表面的东西也可以看出一个人的习惯.办事风格.条