如何有选择地覆盖类的功能

时间:2017-07-18 11:42:15

标签: java class interface

我有一个抽象类A,它包含两个函数,都是实现的

public void entry(){}
public void exit(){}

这些是在内部进行系统调用,我想在某些情况下避免这些调用。我正在编写一个测试(单独的类),我将自己进行调用,但我不想干扰代码的正常运行。我可以通过哪些方式实现这一目标?

我想到的一种方法是使用这两个函数创建一个接口B,并在实现此接口并包含实际代码的抽象类中创建一个类C.在抽象类中,我将有一个函数来设置我想要使用的接口实例化。例如:

public static void setMockProvider(B provider) {
    if (provider != null) {
        mockProvider = provider;
    } else {
        mockProvider = new C();
    }
}

然后在调用入口和出口函数的任何地方,我都会做一个mockProvider.entry()和mockProvider.exit()

2 个答案:

答案 0 :(得分:1)

我建议就像你说的那样。用这两种方法建立一个接口。并在需要不同实现的地方覆盖它们。

界面

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
    }

}

确保在两个类中实现接口。

希望这会有所帮助。

喝彩!

答案 1 :(得分:0)

不完全确定我是否完全理解了这个问题,但是你想在不干扰方法基础的情况下进行自己的调用(我假设它们是被继承的)?

如果是这样,你可以进行super()调用,super会调用你继承的类的方法。

@Override
public void entry() {
  super();
  //Your code
}