`
Roger111
  • 浏览: 49840 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

修改方法的访问标志

    博客分类:
  • java
阅读更多

有些时候我们继承某类时,父类中的私有方法对子类不可以,但又不想去改变父类。这时可以利用java.reflect.Method的setAccessible方法来改变该私有方法的访问标志。

父类中getTime()方法是私有的。

package reflect;

import java.text.SimpleDateFormat;
import java.util.Date;

public class OriginalMethod {
	private String getTime(){
		Date date = new Date();
		
		SimpleDateFormat sdf = new SimpleDateFormat("yyyy.MM.dd-HH.mm.ss");
		String time = sdf.format(date);
		return time;
	}
	
	public String getBjTime(){
		return "BJ time is : " + getTime();
	}
}

 子类中想引用这个方法:

package reflect;

import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;

public class Child extends OriginalMethod {
	static Method getTime = null;

	static {
		try {
			getTime = OriginalMethod.class.getDeclaredMethod("getTime");
			getTime.setAccessible(true);
		} catch (NoSuchMethodException e) {
			e.printStackTrace();
		} catch (SecurityException e) {
			e.printStackTrace();
		}
	}

	String getTJTime(){
		String Tianji = "";
				try {
					Tianji = (String) getTime.invoke(this);
				} catch (IllegalAccessException e) {
					e.printStackTrace();
				} catch (IllegalArgumentException e) {
					e.printStackTrace();
				} catch (InvocationTargetException e) {
					e.printStackTrace();
				}
		return "tian ji time is : " + Tianji;
	}
	
	public static void main(String[] args) {
		String ss = new Child().getTJTime();
		System.out.println(ss);
	}
}

 

分享到:
评论

相关推荐

    C#net反射实现访问类中的私有变量或者方法

    - **设置私有字段的值**:使用`SetValue`方法将`myValue`字段的值从“old value”更改为“new value”。 #### 2.3 深入理解 - **`BindingFlags`标志**:`BindingFlags`是一个枚举类型,用于指定如何搜索要访问的...

    修改进程常量的几种方法-如何修改进程只读数据段的访问控制属性.rar

    - **修改页属性**:使用VirtualProtect函数,将只读数据段的页面保护标志更改为可写,如PAGE_READWRITE。 - **写入数据**:现在可以使用WriteProcessMemory函数,将新的常量值写入到指定的内存位置。 - **恢复页...

    布尔标志控制管理FlagFactory

    它将所有的布尔标志整合到一个单一的类中,提供统一的接口来访问和修改这些标志。这样做的好处有以下几点: 1. **减少耦合**:通过集中管理标志, FlagFactory减少了各个模块之间对标志的直接依赖,降低了代码的...

    MySQL中修改密码及访问限制设置详解

    #### 二、MySql中访问限制的设置方法 MySQL允许管理员对不同用户设置访问权限,以增强数据库系统的安全性。以下是一些设置访问限制的方法: 1. **使用Grant命令授权** - **示例**: ```sql GRANT ALL ...

    修改文件(文件夹)的属性(隐藏,只读,存档,创建时间,最后访问时间,最后修改时间)

    本文将详细讲解如何修改文件(文件夹)的属性,包括隐藏、只读、存档属性,以及如何调整创建时间、最后访问时间和最后修改时间。 一、隐藏属性 隐藏属性是一种保护措施,使文件或文件夹在常规视图下不可见。要修改...

    spring资源访问

    这种方式的好处在于,可以根据需要灵活地选择不同的资源访问方式,而无需修改应用程序的核心逻辑。 #### ResourceLoader接口与ResourceLoaderAware接口 - **ResourceLoader接口**:此接口只有一个方法`getResource...

    PLC特殊标志位

    这些特殊标志位是预定义的,用户无法直接修改,但可以通过读取或根据它们的状态来控制程序的行为。 首先,SM0.0是一个常开位,始终为1,常用于初始化条件或循环开始的判断。SM0.1只在第一次扫描时为1,通常用于调用...

    16 - MethodVisitor生成构造方法 - 简书1

    对于构造方法,我们传入`ACC_PUBLIC`访问标志,表示公共构造方法,`"<init>"`作为方法名,`"()V"`作为描述符,表示无参数的构造方法,最后两个参数可以留空,表示没有异常表。 3. **创建MethodVisitor实例**:`...

    ADO_NET数据访问技术的应用研究2.doc.pdf

    随着微软技术的发展,数据库访问技术经历了多次迭代,从早期的ODBC(开放式数据库连接)到OLE DB(对象链接与嵌入数据库),再到ADO(ActiveX Data Objects),直至ADO.NET,每一次进步都标志着新的数据访问模型和...

    stm32f103 FreeRTOS事件标志组实验.zip

    事件标志组是一种在任务间进行同步和通信的有效方法。它允许一个任务等待多个事件的发生,而这些事件可以由其他任务或者中断服务例程设置。当设定的事件发生时,等待的任务会被唤醒并继续执行。 1. **FreeRTOS核心...

    系统访问控制与审计技术(ppt32).pptx

    访问能力表是另一种实现自主访问控制的方法,它提供给主体具有特定访问权限的能力标志,这些标志可以转移给进程,且在进程运行时可进行修改。然而,由于能力的自由转移,访问能力表不能实现完备的访问控制,这通常是...

    系统访问控制与审计技术.ppt.pptx

    访问能力表是另一种自主访问控制形式,它为每个主体提供不可伪造的能力标志,这些标志代表了对特定客体的访问权限。主体可以将这些能力转移给其他进程,但这种转移不受任何策略约束,可能导致无法完全追踪所有有权...

    java字节码例子 可以动态修改类 bcel

    5. `Field`和`Method`:表示类的字段和方法,包含它们的访问标志、类型、名称、描述符等。 6. `InstructionList`和`Instruction`:用于构建字节码序列,可以精确控制方法的执行逻辑。 通过这些组件,我们可以实现...

    注册表权限修改源代码

    在Windows API中,我们可以使用`RegOpenKeyEx()`函数打开一个注册表键,同时通过指定`KEY_SET_VALUE`或`KEY_ALL_ACCESS`访问标志来获取写入权限。如果需要修改权限,还需要调用`RegSetKeySecurity()`函数。这个函数...

    设置系统标志位保护(驱动保护、易语言)

    设置系统标志位保护就是一种常见的防御策略,通过修改特定标志位来限制对驱动的非法访问或者异常操作。 易语言是一种中国本土的、以中文为编程语句的编程环境,旨在降低编程难度,让更多的人能参与到程序开发中。在...

    以编程方式更改屏幕方向 更改屏幕方向 修改分辨率

    本文将详细讲解如何使用C#来更改屏幕方向和修改分辨率,以满足特定场景的需求。 首先,我们需要引入必要的Windows API。Windows API提供了对操作系统底层功能的访问,例如控制显示器设置。在C#中,我们可以使用`...

    文件时间修改器

    在IT领域,文件时间修改器是一种实用工具,它允许用户更改文件或文件夹的元数据,特别是创建时间、访问时间和修改时间戳。这些时间戳在操作系统中存储了关于文件操作的重要信息,通常由系统自动记录。然而,在某些...

    清除nvidia control panel的桌面右击标志

    #### 四、移除桌面右击标志的方法 如果用户不希望每次点击桌面右键时看到“NVIDIA Control Panel”选项,可以通过以下步骤来移除它: ##### 方法一:使用命令行工具 1. **打开命令提示符**:按下`Win + R`组合键,...

Global site tag (gtag.js) - Google Analytics