如题,为什么Java的静态代理中,要求代理类和被代理类实现同一个接口呢?生成代理类时,直接将被代理类的对象引用传递给代理类不也可以实现相同的功能吗?
4条回答 默认 最新
iKwanChan 2021-08-17 16:27关注直接将被代理类的对象引用传递给代理类,看起来是可以实现相同的功能,但是实际上会破坏了原来第三方调用的代码。
举个例子:
1、假设 类Cat 继承 接口Animal,并实现了方法 call()2、第三方调用:
Animal animal = createAnimal(new Cat()); //createAnimal是封装后提供第三方调用的方法
animal.call();3、createAnimal实现
Animal createAnimal(Animal animal){
...
}
创建代理
1、假设Proxy是新建的代理类,但没有实现Animal接口;2、第三方调用需要修改:
Proxy animal = createAnimal(new Cat());
animal.call();3、createAnimal实现需要修改:
Proxy createAnimal(Animal animal){
...
}如果Proxy实现了Animal接口,则不会出现这种问题。
本回答被题主选为最佳回答 , 对您是否有帮助呢?评论 打赏 举报解决 2无用 1