我有一个抽象类 A,其中包含两个函数,均已实现
public void entry(){}
public void exit(){}
这些是内部进行的系统调用,我想在某些情况下避免这些调用。我正在编写一个测试(单独的类),我将在其中进行自己的调用,但我不想干扰代码的正常运行。我可以通过哪些方式实现这一目标?
我想到的一种方法是使用这两个函数创建一个接口(interface) B,并在实现该接口(interface)并包含实际代码的抽象类中创建一个类 C。在抽象类内部,我将有一个函数来设置我想要使用的接口(interface)实例化。示例:
public static void setMockProvider(B provider) {
if (provider != null) {
mockProvider = provider;
} else {
mockProvider = new C();
}
}
然后无论在哪里调用入口和导出函数,我都会执行mockProvider.entry()和mockProvider.exit()
最佳答案
我建议就像你说的那样。用这两个方法做一个接口(interface)。并在您想要不同实现的地方覆盖它们。
界面
public interface Interface
{
void methodA();
}
A类(抽象类)
public class A : Interface
{
void methodDescision(T parameter)
{
if(parameter != null)
{
methodA();
}else{
var YourInnerClass YIC = new YourInnerClass();
YIC.methodA();
}
}
@Override
methodA(){
// do default stuff
}
public class YourInnerClass
{
@Override
methodA(){
//do user defined stuff
}
}
}
B类(其他类)
public class B : Interface
{
@Override
void methodA()
{
//your new implementation of that method
}
}
确保在两个类中实现接口(interface)。
希望这有帮助。
干杯!
关于java - 如何有选择地重写类的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45165825/