我有以下名为 A
的类,方法为 getValue()
:
public class A {
public final int getValue() {
return 3;
}
}
getValue()
方法总是返回 3,然后我有另一个名为 B
的类,我需要实现一些东西以访问 A
类中的方法 getValue()
,但我需要返回 4而不是 3。
B
类:
public class B {
public static A getValueA() {
return new A();
}
}
主类ATest
:
import org.junit.Test;
import static org.junit.Assert.assertEquals;
import org.junit.runners.JUnit4;
public class ATest {
@Test
public void testA() {
A a = B.getValueA();
assertEquals(
a.getValue() == 4,
Boolean.TRUE
);
}
}
我试图覆盖该方法,但我真的不知道如何获得我想要的。任何问题都可以在评论中发表。
最佳答案
您不能覆盖该方法,因为它是final
。如果它不是final
,您可以这样做:
public static A getValueA() {
return new A() {
// Will not work with getValue marked final
@Override
public int getValue() {
return 4;
}
};
}
此方法在 B
中创建一个匿名子类,覆盖该方法,并将一个实例返回给调用者。匿名子类中的重写根据需要返回 4
。
关于java - 如何修改另一个类的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40432938/