gpt4 book ai didi

java - 如何有选择地重写类的函数

转载 作者:行者123 更新时间:2023-12-02 12:35:46 26 4
gpt4 key购买 nike

我有一个抽象类 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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com