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

标签 java class interface

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

相关文章:

java - @Autowired 类中的监听器被调用两次

java - Instant 和 Date 之间的转换是否从 Java 8 更改为 11?

python - Tornado 异步调用一个函数

java - 为什么接口(interface)不支持静态方法?

java - Android RAM页面大小?

java - 在 JTextField 中检测回车键

c++ - C++查询类的静态成员变量

java 。创建类似于List的新类

c# - 限制什么类型可以通过接口(interface)传递给方法

java - 获取泛型类型参数的正确方法