当我更改方法中的参数时,调用相同方法的其他 类 会受到干扰

When I change arguments in a method other classes which are calling same very method get disturbed

我现在有三个 class 一个是主要的 class,

Class答:

class A{
  int result;    
  
  int getHeightBase() {
    return result;
  }

  void setHeightBase(int h, int b) {
   result=h*b;
  }
}

Class乙:

此 class 将执行与 A

不同的计算
class B{
  int result;

  int getHeightBase() {
    return result;
  }

  void setHeightBase(int h, int b) {
   result=12*h*b;
  }
}

主要Class:

public class Main {    

  public static void main(String[] args) {

   A a= new A();    
   B b= new B();    
  calculateArea(a,b);    
  }

void calculateArea(A obj1, B obj2){    
  obj1.setHeightBase(5,6);    
  obj2.setHeightBase(5,6);
}

}

现在,当我更改 class A 方法 setHeightBase 或 class B 方法 setHeightBase 的参数时出于某种原因,我必须在 MainClass 以及我发送整数值的地方进行更改,我认为这与设计模式背道而驰,谁能指导我如何摆脱它,我想稍后更改参数但是我不想影响任何其他 class 或更改任何其他 class,我尝试使用界面但没有得到如何摆脱这个问题 提前致谢,如有任何帮助,我们将不胜感激

可以使用方法重载,

  void setHeightBase(int h, int b) {
     result=12*h*b;
  }

  void setHeightBase(double h, double b) {
     result=12.0*h*b;
  }

这将保存之前的方法并创建一个具有准确名称和不同参数的方法。

假设你有这个 class:

public void printNumbers(int one, int two) {
  int result = one + two;
  System.out.println("result = " + result);
}

这是从多个其他 classes 调用的。您不能只更改签名(返回类型、方法名称、参数列表)并期望一切正常。

现在,假设您不希望它自动打印总和,但您希望能够选择执行加法或减法的操作。

对于当前的方法,不要改变任何东西。它被用于添加。因此,您将添加一个重载方法,它接受一个附加参数:

public void printNumbers(int one, int two) {
  int result = one + two;
  System.out.println("result = " + result);
}

public void printNumbers(int one, int two, String action) {
  // action is either add or sub
  if ( !"add".equals(action) && !"sub".equals(action) ) {
    System.out.println("Error");
  } else if ("add".equals(action) {
    int result = one + two;
    System.out.println("result = " + result);
  } else {
    int result = one - two;
    System.out.println("result = " + result);
  }
}

完成后,您可以将原始方法更改为:

public void printNumbers(int one, int two) {
  printNumbers(one, two, "add");
}

public void printNumbers(int one, int two, String action) {
  // action is either add or sub
  if ( !"add".equals(action) && !"sub".equals(action) ) {
    System.out.println("Error");
  } else if ("add".equals(action) {
    int result = one + two;
    System.out.println("result = " + result);
  } else {
    int result = one - two;
    System.out.println("result = " + result);
  }
}

并且曾经提供的功能将保持不变,而您不必更改任何其他现有代码

我会使用抽象 class 作为基础,并从中扩展其他 classes。抽象 class 中的 public 方法将作为与外界的契约。将来,如果您想公开其他方法,您可以将它们添加到接口中,并根据功能提供默认实现。在现实世界场景中,您可以避免更改现有合同。

举个例子,你的classes可以这样写

abstract class Shape{
    int height;
    int base;
    
    Shape(int height, int base){
        super();
        this.height = height;
        this.base = base;
    }
    
    public int area(){
        return height * base;
    }
    
}

class Shape1 extends Shape{

    Shape1(int height, int base){
        super(height, base);
    }
}

class Shape2 extends Shape{
    
    Shape2(int height, int base){
        super(height, base);
    }
    
    @Override
    public int area(){
        return 12 * height * base;
    }
}

public class Test{
    public static void main(String args[]){
        Shape s1 = new Shape1(2,3);
        Shape s2 = new Shape2(2,3);
        System.out.println(s1.area());
        System.out.println(s2.area());
    }
}