A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

© 周朋飞 中级黑马   /  2012-6-27 12:36  /  1575 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

我在网上看到一个有趣的例子,其实也能回答了论坛当中很多人的这类问题 所以拿出来大家看看
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的话运行的类就是父类 那么返回的就是父类 大家有什么见解都来讨论一下

评分

参与人数 1黑马币 +20 收起 理由
黄奕豪 + 20 赞一个!

查看全部评分

您需要登录后才可以回帖 登录 | 加入黑马