Требовать переопределения определенных методов не-абстрактного класса - программирование
Подтвердить что ты не робот

Требовать переопределения определенных методов не-абстрактного класса

Возможно ли иметь класс, определенный как

public class MyClass
{
    public void methodA(){} // Inherit
    public void methodB(){} // Inherit
    public void methodC(){} // Require override
}

а затем все классы, которые простираются от MyClass, требуется, чтобы переопределить methodC(), а просто наследовать methodA() и methodB()?

Если это возможно, как это сделать? Если это невозможно, можете ли вы предложить альтернативное решение для достижения аналогичного результата?

EDIT:

Мне нужен не абстрактный класс, потому что я хочу иметь возможность создавать экземпляр этого класса.

4b9b3361

Ответ 1

Вы не можете требовать переопределения не абстрактного метода.

Возможно, вы можете сделать что-то похожее на шаблон шаблона :

 public final void methodC() { methodC1(); someMoreLogic(); methodC2();}

 protected abstract void methodC1();

 protected abstract void methodC2();

Здесь methodC инкапсулирует фиксированный алгоритм, который вызывает части, которые должны быть предоставлены подклассами.

Ответ 2

Вам нужно будет сделать абстрактный абстрактный класс.

public abstract class MyClass
{
    public void methodA(){} // Inherit
    public void methodB(){} // Inherit
    public abstract void methodC(); // Require override
}

Ответ 3

Я не думаю, что вы делаете именно то, что хотите. Кроме того, создайте MyBaseClass как абстрактный класс с абстрактными реализациями methodC() для methodA() и methodB(). Извлеките MyClass из него, добавив реализацию для methodC(). Любые классы, на которые вы не хотите наследовать эту реализацию, должны напрямую подклассифицировать MyBaseClass, а не MyClass.

Ответ 4

Если вы хотите, чтобы метод просто наследовался, используйте ключевое слово final. Чтобы заставить переопределить, сделайте это abstract. Тем не менее, только не абстрактные дочерние классы должны будут переопределить его.

Ответ 5

AFAIK нет способа принудительно переопределить метод в Java без абстрактного.

Вы можете достичь класса abstract, выполнив метод method as abstract.

Ответ 6

одним из способов сделать это может быть использование виртуального ключевого слова вместо абстрактного, но оно не требует для переопределения, но вы можете переопределить. хотя вы можете создать экземпляр.

другим способом и более рекомендуется создать интерфейс, в котором вы можете указать, какие требования к классу. это что-то вроде абстрактного, вы указываете, что требовать, но имейте в виду, что интерфейс не является классом. это больше похоже на указатель. больше для интерфейса нажмите: https://docs.oracle.com/javase/tutorial/java/concepts/interface.html