Java中的方法增强
A:在不影响业务情况下,增强一个方法有几种方法呢?
B:3种!
A:哪三种呀?
一、继承类来重写方法;
1、要可以获取这个类的构造;
class Man{
public void run(){
System.out.println("跑....");
}
}
class SuperMan extends Man{
public void run(){
super.run();
System.out.println("飞....");
}
}
二、装饰者模式
1、包装类要和被包装类实现同一接口;
2、包装类要获取被包装类的引用;
public interface Tenant {
void rent();
}
public class People implements Tenant {
public void rent() {
System.out.println("支付租金");
}
}
public class PeopleProxy implements Tenant {//实现统一接口
private People p;
public PeopleProxy(People p){//获取被包装类的引用
this.p = p;
}
public void rent() {
System.out.println("我是中介我要先收中介费");
p.rent();
}
}
三、动态代理
1、被增强的对象实现接口即可;
public class ActiveProxy implements InvocationHandler {
private Object o;
public ActiveProxy(Object o){
this.o = o;
}
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
Object invoke = method.invoke(this.o, args);
return invoke;
}
}
public class Run {
public static void main(String[] args) {
//获得要增强实现类的对象
Tenant p = new People();
//类加载器
ClassLoader c = p.getClass().getClassLoader();
//产生的代理对象的引用
ActiveProxy handler = new ActiveProxy(p);
Tenant app = (Tenant) Proxy.newProxyInstance(c,new Class[]{Tenant.class},handler);
app.rent();
}
}
Java中的方法增强的更多相关文章
- Java中的方法应用
一.如何定义java中的方法 所谓方法,就是用来解决一类问题的代码的有序组合,是一个功能模块. 语法: 1. 访问修饰符:方法允许被访问的权限范围, 可以是 public.protected.priv ...
- c#和java中的方法覆盖——virtual、override、new
多态和覆盖 多态是面向对象编程中最为重要的概念之一,而覆盖又是体现多态最重要的方面.对于像c#和java这样的面向对象编程的语言来说,实现了在编译时只检查接口是否具备,而不需关心最终的实现,即最终的实 ...
- Java中的方法(形参及实参)return返回类型
如何定义 Java 中的方法 所谓方法,就是用来解决一类问题的代码的有序组合,是一个功能模块. 一般情况下,定义一个方法的语法是: 其中: 1. 访问修饰符:方法允许被访问的权限范围, 可以是 pub ...
- java中的方法method
java中的方法必须存在于类class里,不能独立存在.类是描述具有某种特征的事物,方法则是这类 事物具有的某种功能,通过调用方法可以实现某种特定的功能.方法名一般以小写的动词开头. 例: publi ...
- JAVA中native方法调用
在Java中native是关键字.它一般在本地声明,异地用C和C++来实现.它的声明有几点要注意:1)native与访问控制符前后的关系不受限制.2)必须在返回类型之前.3)它一般为非抽象类方法.4) ...
- Java09-java语法基础(八)java中的方法
Java09-java语法基础(八)java中的方法 一.方法(函数/过程):是一个程序块,可以完成某种功能 1.java中方法的定义格式 [访问控制修饰符] 返回值类型 方法名(参数列表){ 方 ...
- 使用java中replaceAll方法替换字符串中的反斜杠
今天在项目中使用java中replaceAll方法将字符串中的反斜杠("\")替换成空字符串(""),结果出现如下的异常: java.util.regex.Pa ...
- java中,方法可以访问他的类对象的任何私有特性
java中,方法可以访问他的类对象的任何私有特性 读一本书(Core Java for the Impatient)时,发现这个注意,以前的时候没有在意,今天仔细想想发现记忆不深刻.记录一下 下面代码 ...
- java中main方法的 (String []args)
java中main方法的 (String []args) String[] args是main函数的形式参数,可以用来获取命令行用户输入进去的参数.java 本身不存在不带String ...
- 自己(转)JAVA中toString方法的作用
JAVA中toString方法的作用 因为它是Object里面已经有了的方法,而所有类都是继承Object,所以“所有对象都有这个方法”. 它通常只是为了方便输出,比如System.out.print ...
随机推荐
- Tensorflow框架实现中的“三”种图
https://zhuanlan.zhihu.com/p/31308381 图(graph)是 tensorflow 用于表达计算任务的一个核心概念.从前端(python)描述神经网络的结构,到后端在 ...
- Idea下载指南之几个选项
通常我们在下载idea等一些图形编译器时,都会有很多选项供您选择,下面我们来看下这几个英文选项吧. create desktop Shortcut Update Path variable(resta ...
- What is REST and Restful?
什么是rest 和 restful? 提出rest的作者,目的:符合框架原理的情况下,理解和评估以网络为基础的应用软件的架构设计,得到一个功能强,性能好,适宜通讯的架构. Fielding将他对互联网 ...
- taro+vue3模板-废弃
一.初始化 1.Taro 基本安装并初始化项目 npx @tarojs/cli init WechatAppDemo 2.cd到新项目的文件夹 3.安装依赖:yarn 4.运行预览: yarn dev ...
- Solution Set - 杭电多校 2022 Day2 一句话题解
A:看了题就很容易想到虚树吧,建出虚树后考虑整体扫一遍虚树,注意到这是一棵根向树,那么统计其实十分简单,将对 \(C\) 类节点的标记下放,\(A,B\) 类节点同时上传,如果在 DFS 的过程中发现 ...
- mysql数据库配置
1.下载mysql数据库解压到自己存放的路径 2.解压之后配置环境变量 [此电脑]- [右键]-[属性]-[高级系统设置]-[环境变量]- [找到系统变量中的path]-[选中]-[编辑]- [新建] ...
- Mysql数据库基础第二章:(九)分页查询
Mysql数据库基础系列 软件下载地址 提取码:7v7u 数据下载地址 提取码:e6p9 mysql数据库基础第一章:(一)数据库基本概念 mysql数据库基础第一章:(二)mysql环境搭建 mys ...
- 【JVM】学习JVM垃圾回收理论
参考链接:https://www.cnblogs.com/aspirant/p/8662690.html 一,垃圾回收算法 JVM内存结构:程序计数器.虚拟机栈.本地方法栈.堆区.方法区 1,引用计数 ...
- google api 后端打点上报
https://developers.google.com/analytics/devguides/collection/protocol/ga4/sending-events?client_type ...
- 我的第一周C语言作业
这个作业属于哪个课程 https://edu.cnblogs.com/campus/zswxy/SE2020-2 这个作业要求在哪里 https://edu.cnblogs.com/campus/zs ...