问题
I have the following class called A, with the method getValue():
public class A {
public final int getValue() {
return 3;
}
}
The method getValue() always returns 3, then i have another class called B, i need to implement something to access to the method getValue() in the class A, but i need to return 4 instead 3.
Class B:
public class B {
public static A getValueA() {
return new A();
}
}
The main class 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
);
}
}
I tried to override the method, but really i dont know how to get what i want. Any question post in comments.
回答1:
You cannot override the method, because it is final. Had it not been final, you could do this:
public static A getValueA() {
return new A() {
// Will not work with getValue marked final
@Override
public int getValue() {
return 4;
}
};
}
This approach creates an anonymous subclass inside B, overrides the method, and returns an instance to the caller. The override in the anonymous subclass returns 4, as required.
回答2:
Take a closer look at what you're doing: You've given the class B a factory method to create a new instance of class A. But this is not changing anything on the implementation of the method getValue().
Try this:
Remove the final modifier from method getValue() in class A.
Then let class B extend/inherit class A.
public class B extends A {
@Override
public int getValue() {
return 4;
}
}
Hope this will help... =)
Best regards
Alex
来源:https://stackoverflow.com/questions/40432938/how-to-modify-a-method-from-another-class