我在网上看到一个有趣的例子,其实也能回答了论坛当中很多人的这类问题 所以拿出来大家看看
package testDemo;
class SuperClass {
SuperClass() throws Exception {
System.out.println(super.getClass().getName());
}
void show() {
System.out.println(super.getClass().getName());
show2();
}
void show2() {
System.out.println("super.show2");
}
}
public class SubClass extends SuperClass {
SubClass() throws Exception {
}
void show() {
super.show();
System.out.println(super.getClass().getName());
}
void show2() {
System.out.println(super.getClass().getSuperclass().getName());
}
public static void main(String args[]) throws Exception {
SuperClass s = new SubClass();
new SuperClass().show();
/*
* System.out.println(s.getClass()); SuperClass sc2 = (SuperClass)s;
* //强行转换为父类,看看有没有效果? System.out.println(sc2.getClass());
*/
// s.show();
}
/*
* } 第一:不管是T1的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的运行时类。
*
* 同理:根据LZ的例子,new T1()时,运行是类不可能是T1他老子Date,更不会他各种老老子(如Object),只能是自己。
*
* 再回到Object.getClass()释义,返回的只能是T1.class
*
* 第三:如果想要从T1中得到Date.class,可以用T1.getClass().getSuperClass();
*/
}运行时类我觉得就是你new出来的那个对象,然后用这个对象去调用其他方法,如果给成new superclass的话运行的类就是父类 那么返回的就是父类 大家有什么见解都来讨论一下 |