Давайте предположим, что у меня есть следующие классы:Как избежать избыточного кода для статических методов
public class Cat {
private final String noise = "meow";
pulic static void makeNoise(){
System.out.println(noise);
}
}
public class Dog {
private final String noise = "woof";
pulic static void makeNoise(){
System.out.println(noise);
}
}
Как вы можете видеть, эти два класса разделяют почти один и тот же код. Для удаления избыточного кода, я бы создать родительский класс вроде этого:
public abstract class Animal {
protected final String noise;
public Animal(String noise) {
this.noise = noise;
}
public void makeNoise() {
System.out.println(noise);
}
}
public class Dog extends Animal{
public Dog(){
super("woof");
}
}
Сейчас, к сожалению, я бегу в две проблемы:
- Поскольку шуметь животного не может быть статичным больше , так как константы должны быть назначены через конструктора животного, вам необходимо создать кошку или собаку, чтобы получить шум этого животного. Даже , хотя он постоянный.
- Метод makeNoise() должен работать в классе Animal - у нет шума по умолчанию.
Возможное решение могло бы быть чем-то вроде линии: public abstract void makeNoise(); , который не разрешен, и не стирает необходимость скопировать код в каждого и каждого из детей Animal.
Как бы вы устранили необходимость иметь избыточный код у детей животных, сохраняя при этом метод makeNoise static?
Ваш код не компилируется. Непонятно, почему вы хотите сохранить метод 'static'. Неясно, что вы спрашиваете. – EJP
@ saka1029 Редактировать Отклонено. Не подходите к выводам. – EJP
@EJP Приведенный выше код является упрощенной версией математического класса. Этот класс содержит множество _функций_ для вычисления некоторых значений. Поскольку метод makeNoise() необходим для большинства этих функций, я почувствовал необходимость добавления статичного modifiert. Фактические дети этого класса добавляют некоторые дополнительные функции и имеют собственное значение для постоянного шума: –