我想覆盖第 3 方,开源最终类的非最终方法。
final class A
{
void put(obj a)
{...}
obj get()
{...}
}
请告诉我如何覆盖get()
andput()
方法,但仍保留此类的其他行为和功能。
它是开源的:分叉它,并使类非最终。
如果不使其成为非最终版本,您将无法扩展它。
如果您的类有一个定义的接口,其中定义了 put 和 get 方法,那么您可能想尝试代理该类。
最简单的方法是创建这样的东西:
public interface CommonInterface {
void put(); Object get();
}
final class A implements CommonInterface
{
void put(obj a)
{...}
obj get()
{...}
}
public class ProxyToA implements CommonInterface{
private A a;
void put(Object a){
// your override functionality
}
Object get(){
// same here
}
void otherAStuff(){
a.otherAStuff();
}
}
然后只需使用 CommonInterface 并代理您的对象。或者您可以使用 JDK 代理、javassist 等。
你不能扩展final
课程。根据 Java 规范。
您绝对应该尝试找出课程是最终课程的原因。如果您能够说服自己这样做是可以的,另一种选择是使用AspectJ来更改这两种方法的行为。
AspectJ允许您修改特定方法的行为。它甚至可以对private
方法(允许安全约束)执行此操作,并访问和分配类的私有字段。
简短的回答是你不能重写方法,因为你不能扩展类。您打算通过覆盖来处理 get 和 put 方法吗?如果您正在寻找为这些方法添加一些功能,您可以创建另一个包含此类的类。