На первый взгляд, я бы сказал, что было бы лучше сделать общий код открытым общедоступным статическим методом в открытом классе.Это сделает метод полезным для любого класса, просто используя
UtilityClassName.methodName();
Это лучше, чем сделать его конкретным методом в абстрактном суперклассе, потому что тогда вам всегда нужно будет расширять этот суперкласс во всехклассы, где вы хотите использовать этот единственный метод.
Но теперь, как вы сказали, поведение метода зависит от некоторых переменных.Теперь, если это зависит от переменных экземпляра разных классов, лучше добавить этот метод в интерфейс, и пусть все ваши классы реализуют этот интерфейс и имеют свою собственную реализацию того же самого.
Но опять же, если эти переменныепостоянные значения, то есть эти постоянные значения в интерфейсе.Реализуйте эти интерфейсы в своем служебном классе.И снова сделайте его статическим методом в этом служебном классе, который будет напрямую использовать эти константы.
Для, например, рассмотрим следующее.общий код возвращаемой области круга.
public interface TwoDimensional{
double PI = 3.14;
}
public class MyUtility implements TwoDimensional{
public static double getCircleArea(double radius){
return PI*radius*radius;
}
}
Здесь вы можете видеть, что метод getCircleArea () зависит от радиуса, который будет различным для разных классов, но все же я могу передать это значение статическому методукласса myUtility.