У меня есть абстрактный класс Work
с двумя абстрактными методами (init
и work
) и один конкретный метод (run
), работающий с абстрактными методами.Как заменить абстрактный класс интерфейсом на Java?
class work
{
abstract static class Work<T> implements Runnable
{
T data;
abstract protected void init();
abstract protected void work();
public void run()
{
init();
work();
System.out.println (data);
}
}
public static void main (String[] args)
{
Runnable hello = new Work<String>() {
protected void init() { data = "Hello $1!"; }
protected void work() { data = data.replace ("$1", "World"); }
};
(new Thread(hello)).start();
}
}
Для того, чтобы избавиться от проблемы множественного наследования Я хотел бы преобразовать абстрактный класс в интерфейс. Но в интерфейсах Java не может содержаться тело. Итак, где я должен поместить общие данные и метод после преобразования абстрактного класса в интерфейс?
Я боюсь, что избавиться от проблемы множественного наследования невозможно, если я хочу поделиться чем-то конкретным. Это правильно?
Где и как вы сталкиваетесь с проблемой множественного наследования здесь? –
Я боюсь, что это невозможно, одной альтернативой множественному наследованию является инкапсуляция, где «дочерний» класс перестает расширять родительский класс и начинает иметь экземпляр «родительского» класса в качестве поля, а затем использует его методы. Является ли это подходящим, зависит в значительной степени от вашего случая использования, хотя –
Это может помочь, если вы показываете другой родительский класс, который должен расширять дочерний класс, и как ребенок будет использовать оба родителя. –