有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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

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

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

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

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

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

然后无论在哪里调用入口和出口函数,我都会做一个模拟提供者。entry()和mockProvider。退出()


共 (2) 个答案

  1. # 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
        }
    
    }
    

    确保在两个类中都实现了接口

    希望这有帮助

    干杯

  2. # 2 楼答案

    不太确定我是否完全理解这个问题,但您希望在不干扰方法基础工作的情况下进行自己的调用(我假设它们是继承的)

    如果可以执行super()调用,super将调用继承自的类的方法

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