浅谈Java反射一

作者: EGOISTK21 | 来源:发表于2016-10-12 23:57 被阅读50次

转载请注明出处:
http://egoistk21.xyz/2016/10/12/浅谈Java反射一/

这学期刚开学的时候在睿思(我们学校的BBS)上看到了一个学长的求助,就收藏了,那时候自己还在搭建Hexo博客,没时间研究,昨天就去翻看了一下,原题如下:

public class A {
    protected String getString() {
        return "A";
    }
}

public class B extends A {
    protected String getString() {
        return "B";
    }
}

public class C extends B {
}

要求在子类C的对象中访问其父类的父类A中的getString方法。


这题不能想当然地在C类里面加一个A类的成员,要访问一个编译时根本无法预知类型的对象,那必须使用反射。那今天我们就来讲一下用反射查看类的信息。

我们先来讲一下Java中Class这个类,好比类是一批拥有共同特征的对象的抽象,Class是这些类的抽象,也就是说Class是所有类的类。Class 类的实例表示正在运行的 Java 应用程序中的类和接口。Class 没有公共构造方法。Class 对象是在加载类时由 Java 虚拟机以及通过调用类加载器中的 defineClass 方法自动构造的。例如car.getClass().getName(); 还可以使用一个类字面值来获取指定类型(或 void)的 Class 对象。例如,Car.class.getName(); 有了获取正在运行的 Java 应用程序中的类的方法,接下来就好办了。

public class C extends B {
    public static void main (String args[]){
        Class a = C.class.getSuperclass().getSuperclass();
        try {
            Object o = a.newInstance();
            A c = (A)o;
            System.out.println(c.getString());
        } catch(Exception e) {
            e.printStackTrace();
        }
    } 
}

或者下面这个更好的

public class C extends B {
    public static void main (String args[]){
        Class a = C.class.getSuperclass().getSuperclass();
        try {
            Method m = a.getDeclaredMethod("getString",null);
            System.out.println(m.invoke(a.newInstance(),null));
        } catch (Exception e) {
            e.printStackTrace();
        }
    } 
}

下一篇我来讲一下怎么用反射调用私有属性和方法(setAccessible)。

晚安。

相关文章

  • 浅谈Java的反射机制和作用

    作者:Java大师 本文转载自:浅谈Java的反射机制和作用 - idea激活- IntelliJ IDEA 20...

  • 浅谈Java反射一

    转载请注明出处:http://egoistk21.xyz/2016/10/12/浅谈Java反射一/ 这学期刚开学...

  • 浅谈Java反射

    总所周知,Java语言是完全面向对象的。类对属性和方法进行封装,通过访问修饰符提供外界可访问的权限。 但是通过反射...

  • 浅谈Java反射二

    转载请注明出处:http://egoistk21.xyz/2016/10/13/浅谈Java反射二/ 昨天说的要更...

  • 浅谈java反射【原创】

    参考书籍《疯狂java》 反射的用处 反射能获取对象的属性,以及对象的属性值,甚至是私有的方法,这个一般是用在框架...

  • Java反射机制入门

    Java反射机制入门 一、什么是反射 JAVA反射机制(The JAVA reflection mechanism...

  • 博客地址

    java注解-01、java注解-02、Git面试资源java反射-01、java反射-02、java反射-03为...

  • 浅谈Java的反射(Reflection)

    什么是反射? 反射有什么用? 如何使用反射? 什么是反射? 反射被广泛运用在那些需要检查和控制改变在运行时的行为的...

  • 浅谈java中的反射

    引言:java的高级特性-反射一直是困扰自己的一个很大问题,今天专门花了半天再将java中的反射看了一遍,下面简单...

  • 反射之一

    总结内容源自一下文章粗浅看java反射机制反射机制应用实践谈谈java反射机制Java Reflection(反射...

网友评论

    本文标题:浅谈Java反射一

    本文链接:https://www.haomeiwen.com/subject/hkqwyttx.html