this.getClass()和super.getClass()得到的是同一个类

  今天dubug代码时发现this.getClass()和super.getClass()得到的竟然是同一个类,都是当前类。

遍访网络资料得出:

  getClass()不受this和super影响,而是有当前的运行类决定的。

详细解释:

  getClass public final Class<? extends Object> getClass()返回一个对象的运行时类。该 Class 对象是由所表示类的 static synchronized 方法锁定的对象。 返回: 表示该对象的运行时类的 java.lang.Class 对象。此结果属于类型 Class<? extends X>,其中 X 表示清除表达式中的静态类型,该表达式调用 getClass。 getName public String getName()以 String 的形式返回此 Class 对象所表示的实体(类、接口、数组类、基本类型或 void)名称。getClass表示该对象的运行时类的 java.lang.Class 对象 上面俩句话实体都是子类,所以打印出来都是子类类名。

启示:

  若要获得父类属性与方法,请使用

  this.getClass().getSuperclass().getName();

  而不是

  super.getClass().getName();

原文地址:https://www.cnblogs.com/guanghe/p/10844846.html

时间: 2024-10-14 13:27:34

this.getClass()和super.getClass()得到的是同一个类的相关文章

【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类名.

Java的super调用案例: super.getClass()返回的是子类自己

If you override a method from your superclass (or your superclass's superclass etc.), super.theMethod() will invoke the original method instead of the one you overrode it with. If you did not actual override theMethod, super.theMethod() will act exac

super.getclass()的结果是父类还是子类?

package as; 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().getSuperclass().getName()); System.out.println(super.getClass().g

super.getClass()与this.getClass()

原文地址:http://leihuang.org/2014/11/14/getClass-method/ 首先看一段代码: 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()); } }

java super.getClass问题

非常著名的坑了,简单描述就是在A的子类B中某个方法里调用super.get().getName();得到的是A还是B? 答案都是知道,是B.查阅了网上很多说法都是逆推法,例如下例: import java.util.Date; public class Test extends Date{ public static void main(String[] args) { new Test().test(); } public void test(){ System.out.println(sup

super.getClass().getName()

答案 : test.SuperTest 1.首先 super.getClass() 是父类的getClass()方法,其父类是Date,它的getClass()方法是继承自Object类而且没有重写, 所以就是调用object的getClass()方法.而看一下getclass的方法解释如下图   所以可以知道是返回当前运行时的类.   2.在调用getName()方法而getName()是:包名+类名 原文地址:https://www.cnblogs.com/xieguolin/p/10399

关于java中的getClass()

getClass() 返回的是运行时类,即类A继承自B,那么A中无论调用this.getClass() 或者super.getClass() 返回的都是A的class package test; public class BaseOut { public void out() { System.out.println("base out"+getClass().getSimpleName()); } } package test; public class ExtentTest ext

Java:验证在类继承过程中equals()、 hashcode()、toString()方法的使用

以下通过实际例子对类创建过程汇中常用的equals().hashcode().toString()方法进行展示,三个方法的创建过程具有通用性,在项目中可直接改写. //通过超类Employee和其子类Manager ,验证在类继承过程中equals().hashcode().toString()方法的使用.package equals;public class EqualsTest{    public static void main(String[] args){        Employ

关于java中getClass()和getSuperClass()的讲解

为了讲解这个问题,我们先来看一下下面的代码: package com.yonyou.test; import java.util.Date; class Test extends Date{ private static final long serialVersionUID = 1L; public static void main(String[] args) { new Test().print(); } public void print(){ System.out.println("当