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 ...
随机推荐
- R6-1 数字金字塔
1 void pyramid(int n) 2 { 3 int i, j; 4 5 for(i = 0;i < n;i++){ 6 for(j = 0;j < n - i - 1;j++) ...
- python os.path模块函数功能
1.os.path.abspath(path) 获取绝对路径,实际上等于os.getcwd()+path 2.os.path.basename(path)取path最后的文件或文件名.如果path以/ ...
- String.prototype.replace--替换字符串
str.replace(regexp|substr, newSubStr|function) API本身不改变原本的字符串,只是返回新的字符串例子:用函数作为第二个参数function rep ...
- PMP学习:弱势乙方如何利用阶段性需求固化搞定甲方
- vue 项目中笔记-持续更新
9.class常用操作: :class="packUp ? 'search-form-btn active fr' : 'search-form-btn fr'" :class=& ...
- lnmp 修改MySQL默认密码
wget http://soft.vpser.net/lnmp/ext/reset_mysql_root_password.sh;sh reset_mysql_root_password.sh 执行命 ...
- Python使用requests和requests_toolbelt上传文件
1.requests-toolbelt官方文档:https://pypi.org/project/requests-toolbelt/ 2.环境安装 pip install requests-tool ...
- HCIP-ICT实战进阶04-ISIS原理与配置
HCIP-ICT实战进阶04-ISIS原理与配置 0 前言 IS-IS(Intermediate System to Intermediate System, 中间系统到中间系统)协议, 和OSPF一 ...
- modbus_tk Rru
import serialimport structimport loggingimport modbus_tkimport modbus_tk.defines as cstimport modbus ...
- C# Async / Await State Machine
The async/await keywords in C# are very much syntactical sugar that the compiler will use to generat ...