通过反射访问父类的私有成员

Java语言中,子类是不能访问父类的私有成员的,包括成员变量和方法,但可以通过Java的反射机制去访问。

其实在一个子类被创建的时候,首先会在内存中创建一个父类对象然后在父类对象外部放上子类独有的属性,两者合起来形成一个子类的对象。所以所谓的继承使子类拥有父类所有的属性和方法其实可以这样理解,子类对象确实拥有父类对象中所有的属性和方法,但是父类对象中的私有属性和方法,子类是无法访问到的,只是拥有,但不能使用。就像有些东西你可能拥有,但是你并不能使用。所以子类对象是绝对大于父类对象的,所谓的子类对象只能继承父类非私有的属性及方法的说法是错误的。可以继承,只是无法访问到而已。

下面通过一个例子来说明:

原文地址:https://www.cnblogs.com/wwb0811/p/9607504.html

时间: 2024-10-02 23:46:24

通过反射访问父类的私有成员的相关文章

Java利用反射访问对象的私有成员

当我们使用反射为java对象的全部字段逐一赋值的时候,私有字段是不允许直接访问的. 在java.lang.reflect当中,有几个比较实用的API可以解决: getDeclaredFields() :获得所有访问级别的字段 setAccessible(boolean flag): 修改类成员的可访问性 下面以一个JavaBean 对象 转 DBObject 对象的方法为例: public static DBObject bean2DbObject(DBObject dbObject, PicI

Java子类访问父类的私有成员变量

/**子类会继承父类所有的属性和方法. * 但是根据不同的权限标识符,子类不可见父类的私有变量,但可以通过父类的公共方法访问私有变量 * 所以对于重名变量,子类和父类都各有一份. * 对于子类和父类中重名的方法,则为重写.即子类重写了父类的方法,用于多态. * 同一个类中函数的签名不同,则为方法的重载.函数的签名为函数名+参数列表,与返回值无关. */

C#箴言之用属性来访问类的私有成员

在程序中,难免要访问某个对象的私有成员.那么以前实现这类功能的方法有两种,第一种方法最简单,就是把成员访问符从“private”改为“public”即可:而另一个就是提供公有的成员访问函数来进行访问.那么现在用C#编写程序,就不再需要采用前面所说的两种方法了,而直接使用属性来完成. 首先来看看三种方法的如何实现以及调用的,这里用一个例子来说明,即访问“EmployeeInfo”类的私有成员strName,具体如下表格所示. 那么这三种方法有什么区别呢,用如下的表格,可以更好的说明三者的区别. 因

通过反射,如何操作私有成员变量(取/赋值),如何调用私有方法?

Java的反射工具很强大,有句著名的话:No reflection ,no frameworks. 工作中直到涉及到UT,才体会到它的重要性,现归纳整理一个小例子: 反射工具类: 1 import java.lang.reflect.Field; 2 import java.lang.reflect.InvocationTargetException; 3 import java.lang.reflect.Method; 4 5 public class ReflectionUtil { 6 7

C++之在类内部访问对象的私有成员

一.引言 今天看项目里的一段代码发现,竟然可以再类的成员函数中访问该类的对象的私有成员.感觉不可思议. 自己写的实例代码: #include <iostream> using namespace std; class CTest { public: CTest(int n) { m_a = n; } CTest(CTest &t) { m_a = t.m_a; } public: void Print() { cout << m_a << endl; } pri

java中字段继承问题--子类不能继承父类的私有成员

public class Test1 { private int t1 = 1; public int getT1() { return t1; } public void setT1(int t1) { this.t1 = t1; } } 以上是Test1类,有个private的t1,值为1,给了get/set方法. public class Test2 extends Test1 { private int t1 = 2; public static void main(String[] a

c++中类对象不能访问类的私有成员变量

类的成员变量分三种: public   protect  private 1.类的成员函数可以访问类这三类 2.继承类成员函数可以访问 protect  类型 3.只有本身类的成员函数才可以访问 private 类型 4.类的对象若在其他函数中是不可以访问类的 protect  private类型变量 类其实是个模型.而对象就是找个这个模型制作的实体.比如,类是造车的图纸,对象就是找个图纸造出的汽车.类的成员是分级别的:protect,public,private.在类内部定义的函数可以访问任何

子类如何访问父类

子类只能访问父类的非私有属性及方法 1.子类访问父类非私有成员变量 (1)访问不重名成员变量 在主类中:子类对象.父类变量 在子类中:super.父类变量 (2)访问重名成员变量 在主类中:父类 对象 = new 子类() 对象.父类变量 在子类中:super.父类变量 2.子类访问父类非私有成员方法 (1)访问不重名成员方法 在主类中:子类对象.父类方法 在子类中:super.父类方法 或直接调用父类方法 (2)访问重名成员方法 在子类中:super.父类方法 原文地址:https://www

通过指针访问C++对象的私有成员

C++对象的私有成员是禁止类外的访问的.但是我们仍然可以通过指针访问C++对象的私有成员. #include <iostream> using namespace std; class A { public: A(int i = 0) :m_i(i) {} void print() { cout << "m_i" << this->m_i << endl; } private: int m_i; }; int main(int ar