所以,让我们说我有A级方法" foo"返回int" 1":
public class A{
public int foo(){
return 1;
}
}
然后我让B级重写A#foo而不是返回int" 2":
public class B extends A{
@Override
public int foo(){
return 2;
}
}
但问题是,A类来自外部源,每次更新都会更改包名称。我可以使用反射来逃避它,但这只适用于方法和构造函数。如何在不违反A类更新的情况下覆盖A#foo?
答案 0 :(得分:0)
您可以使用定义所需方法的界面。
public interface C{
public int foo();
}
然后是A类的类代理
public class D implements C{
public int foo(){
A a = new A();
return a.foo();
}
}
最后你的B类扩展D并覆盖它的方法。
public class B extends D{
@Override
public int foo(){
return 2;
}
}
每次你想要使用A时,你需要使用D代替。