如何从另一个类
修改的方法我有以下的类名为A
,该方法getValue()
:如何从另一个类
public class A {
public final int getValue() {
return 3;
}
}
的方法getValue()
总是返回,那我也叫B
另一个类,我需要实现一些东西来访问方法getValue()
类A
,但我需要返回而不是。
类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
。
@TimeToCode它已经在那里了:将函数'getValueA'复制粘贴到你的类'B'中,从''''''getValue'中移除'final',进行编译,它会做你想做的。 'new A()'后面的大括号是扩展'A'的匿名类的主体。 – dasblinkenlight
但方法应该是最终的,这是对问题的限制:/ – TimeToCode
你要求的是不可能的。如果你现在已经写了'A','someA.getValue()'总是返回3,并且你无能为力。 –
仔细看看你在做什么:你已经给B类一个工厂方法来创建一个新的A类实例。但是这并没有改变方法getValue()
的实现。
试试这个:
从方法getValue()
类A.
删除final修饰符然后让B类扩展/继承类A.
public class B extends A {
@Override
public int getValue() {
return 4;
}
}
希望这将有助于... =)
致以问候
Al ex
是的,它很明显,但我有限制,在A班的方法应该永远是最终的.. – TimeToCode
好吧,我不得不承认,dasblinkenlight更快,也有正确的答案......真是遗憾.. 。=/ – Quurz
@TimeToCode如果你需要这种方法是最终的,你不能做你想做的。这两个答案都不适用于标记为最终的方法。 – BackSlash
该方法不能被重写。这是'最终'。 –