我有以下类A
,方法为getValue()
:
public class A {
public final int getValue() {
return 3;
}
}
方法getValue()
总是返回 3 ,然后我有另一个名为B
的类,我需要实现一些东西才能访问该方法getValue()
课程中A
,但我需要返回 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
);
}
}
我试图覆盖该方法,但实际上我不知道如何得到我想要的东西。评论中的任何问题。
答案 0 :(得分:2)
您无法覆盖该方法,因为它是final
。如果不是public static A getValueA() {
return new A() {
// Will not work with getValue marked final
@Override
public int getValue() {
return 4;
}
};
}
,你可以这样做:
B
此方法在4
内创建一个匿名子类,覆盖该方法,并将一个实例返回给调用者。根据需要,匿名子类中的覆盖返回{{1}}。
答案 1 :(得分:0)
仔细看看你正在做什么:你给了B类一个工厂方法来创建一个新的A类实例。但这并没有改变方法getValue()
的实现。
试试这个:
从A类中的方法getValue()
中删除最终修饰符。
然后让B类扩展/继承A类。
public class B extends A {
@Override
public int getValue() {
return 4;
}
}
希望这会有所帮助...... =)
祝你好运
亚历