动态代理只能覆盖 public 方法的原因主要是因为 Java 的访问权限控制。在 Java 中,动态代理是通过生成一个继承自 Proxy 类并实现了指定接口的代理类来实现的。这个代理类必须能够访问被代理对象的方法,但是如果被代理对象的方法不是 public,则代理类无法访问这些方法,因此也就无法覆盖这些方法。
另外,Java 的反射机制也是基于访问权限的,如果一个方法不是 public,则只有在同一个包内或者通过反射机制才能够访问它。而动态代理是在运行时生成的代理类,它必须能够在不同的包中访问被代理对象的方法,因此只能覆盖 public 方法。
综上所述,动态代理只能覆盖 public 方法是因为 Java 的访问权限控制和反射机制的限制。
标签:Java,覆盖,代理,访问,方法,public From: https://www.cnblogs.com/apelet/p/18161262