`
nanapoleon
  • 浏览: 48144 次
  • 性别: Icon_minigender_1
  • 来自: 西安
社区版块
存档分类
最新评论

如何通过反射,访问父类的private变量。

阅读更多
Field getField(String name)返回已加载类声明的所有public成员变量的Field对象,包括从父类继承过来的成员变量,参数name指定成员变量的名称

而Field getDeclaredField(String name)不能获取从父类那继承过来的成员变量

所以,当A extends B,我们如果仅仅this.getClass().getDeclaredFields();是不可以得到B的field,要这样: this.getClass().getSuperclass().getDeclaredFields();

设置特定对象的field:
A a = new A();
Field f = A.class.getSuperclass().getDeclaredField("name");
f.setAccessible(true);
f.set(a, "nick");
String s = f.get(a);
print(s);
分享到:
评论

相关推荐

    java反射操作父类所有属性和方法

    本文将详细介绍如何利用Java反射机制来访问和操作父类的所有属性和方法。 #### 二、Java反射基础 在深入讨论如何操作父类之前,我们先简要回顾一下Java反射的基本概念: - **Class**: 每个类都有一个与之对应的`...

    java反射.pdf

    - 通过反射可以访问`private`修饰的属性,这意味着私有成员不再是绝对安全的。 #### 五、通过反射调用方法 反射也支持动态地调用类的方法。 1. **调用方法**: - 使用`getMethod(String name, Class<?>... ...

    基于Java的源码-访问权限控制源代码.zip

    - 子类可以访问父类的public和protected成员,但不能访问private成员。这体现了封装原则,避免了子类对父类实现的不必要依赖。 6. 友元类(Friend Class): - Java中没有直接的友元类概念,但可以通过内部类或者...

    java学习资料-反射机制深入理解剖析

    反射机制允许程序在运行时通过`Class`对象来访问和操作类的信息。`Class`对象代表了Java类的元数据,包含了类的所有属性、方法、构造器等信息。通过`Class`对象,我们可以: 1. 获取类的完整包名和类名,如`...

    java的反射技术

    通过反射机制,开发者可以在运行时动态获取类的信息、创建对象实例以及调用对象的方法。虽然反射带来了灵活性,但也需要注意其性能开销较大,应谨慎使用。在实际开发中,反射通常用于实现高级功能,如框架开发、元...

    PHP面向对象程序设计之类与反射API详解共5页.pdf

    在PHP中,你可以使用`class`关键字来声明一个类,并使用`public`、`private`、`protected`来控制成员的访问权限。例如: ```php class MyClass { public $publicVar; private $privateVar; protected $protected...

    基于java的访问权限控制源代码.zip

    - 继承与访问权限:通过子类继承父类,展示`protected`修饰符在继承关系中的作用。 此外,源代码可能还会涉及访问权限与Java反射API的交互,因为反射允许在运行时动态访问和修改类的私有成员,这在某些高级应用场景...

    java反射机制,详细解释了,java反射机制原理、

    2. **Field 类**:代表类的成员变量,通过 Field 对象可以访问和修改类的属性值,即使这些属性是 private 的。 3. **Method 类**:代表类的方法,允许我们获取方法信息,包括返回类型、参数列表、访问修饰符等,还...

    java反射机制

    接着,我们通过反射访问并修改私有字段`name`的值,最后调用`sayHello`方法。这就是Java反射机制的基本运用。 总的来说,Java反射机制为程序员提供了强大的灵活性,使得程序可以在运行时对类进行分析、操作和扩展,...

    java反射详解

    Java反射机制是Java编程语言的一个核心特性,它允许程序在运行时动态地访问类的信息,并能够直接操作这些类的对象。这种能力对于许多开发框架(如Spring)来说至关重要,因为它使得程序可以在运行时决定执行什么样的...

    私有java

    5. **访问控制与继承**:在继承关系中,子类可以访问父类中的非私有成员,但不能访问私有成员。如果需要在子类中使用父类的私有成员,通常需要通过protected或public的getter和setter方法来实现。 6. **Java反射API...

    InheritanceTest:关于公司的继承例子

    10. **访问父类的私有成员**:虽然Java不支持直接访问父类的私有成员,但在某些情况下,如测试,可以通过内部类或反射机制间接访问。但这通常被视为不推荐的实践,因为破坏了封装性。 这个"InheritanceTest"例子...

    java基础知识精华总结

    - **动态变量初始化**:可以通过反射等技术在运行时动态地设置变量的值。 - **非私有成员变量的初始化**:可以通过构造函数或其他方法初始化非私有成员变量。 - **私有成员变量的初始化**:通常在构造函数内部进行...

    Java 22道基础面试题.docx

    3. 权限修饰符:Java 中有四种权限修饰符,分别是 public、protect、default、private,它们控制着类、方法、变量的访问权限。 4. switch 语句:switch 语句可以作用于 byte、short、int、char、String、enum 等...

    Java基础知识.docx

    - super关键字用于访问父类的成员变量和方法。 2. **final修饰符**:可以修饰类、方法和变量,阻止进一步的扩展或修改。 这只是Java基础知识的一部分,实际学习和应用中,还需要掌握异常处理、集合框架、IO流、...

    java面试终版整理.docx

    10. **继承**:子类继承父类的非private成员变量和方法。在不同包中,子类仅继承protected和public成员。 11. **final关键字**: - **修饰类**:类不可被继承。 - **修饰方法**:方法不能被重写。 - **修饰变量*...

    Java解惑PPT7

    在例子中,Derived类中的private变量`className`隐藏了Base类中的public变量`className`。虽然这是合法的,但并不推荐,因为隐藏可能导致混淆和意外的行为。遵循Liskov替换原则,子类应当能够替换其基类而不影响程序...

    J2SE 学习心得(一些常用知识要点)PART1

    `super.property` 访问父类的属性,`super.method()` 调用父类的方法,`super()` 调用父类的构造器。 4. 构造方法:构造方法用于初始化新创建的对象。构造方法不能被重写,但子类可以覆盖父类的构造方法。创建子类...

    java基础知识

    - **super**关键字:用于访问父类中的成员变量和方法。 #### 五、抽象类与接口 - **抽象类**:不能被实例化的类,通常包含一个或多个抽象方法。抽象方法没有方法体,必须在子类中实现。抽象类可以有构造器、实例...

    Java面试题答案2023

    public 访问修饰符允许从任何地方访问,protected 访问修饰符允许从当前类和子类中访问,default 访问修饰符允许从当前类和同包中的类访问,private 访问修饰符只允许从当前类中访问。 二、Java 虚拟机(JVM) ...

Global site tag (gtag.js) - Google Analytics