2013-09-11 5 views
0

Я хочу иметь семейство классов, которые имеют одинаковый метод. Поскольку этот метод достаточно прост, я хочу, чтобы сделать его окончательным статическим, что-то вродепубличный абстрактный статический метод - почему бы не разрешить?

class A { 
    public static final String createSth() { } 
} 

(на самом деле этот метод возвращает только строку).

Иногда полезно использовать верхние листы всех классов A, B, C тем же способом. Таким образом, я хотел бы создать материнский класс.

class abstract Mother { 
     public static abstract String createSth() { } 
} 

, а затем добавить соответствующие расширения для всех моих классов A, B, C ex. класс А расширяет Мать.

К сожалению, это запрещено Java. Мне интересно, почему?

Конечно, я могу удалить статический окончательный модификатор, а затем все в порядке. Но с другой стороны, если каждый подкласс возвращает константу String, которая никоим образом не модифицируется, почему бы и нет?

Вы можете спросить, в чем цель такой конструкции?

Просто я хочу создать базу данных sql-строк. Для каждой таблицы я создал отдельный класс, и в результате метода createSth я хочу вернуть sql, создав таблицу для этого класса.

Интерфейсы не помогают ни.

Единственными решениями, по-видимому, являются удаление абстрактного модификатора из метода createSth в классе Mother. Но тогда мне не разрешено переходить к классу Mother и вызывать метод createSth для детей. Поэтому мне нужно удалить статический модификатор для дочерних классов.

Заключение Почему абстрактный метод не может быть статическим? Хорошо, я могу это даже понять, но почему почему не статический абстрактный метод не может быть заменен статическим методом в дочернем классе?

+1

Что возвращает строка, которая не «модифицируется каким-либо образом»? Как вы считаете, последний модификатор метода? –

+0

Какова цель абстрактного статического метода? –

ответ

2

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

3

static методы (так же, как и finalprivate) не может быть переопределен таким образом, нет никакого способа их реализации в производном классе, так что делает их abstract не будет иметь смысла.

0

final методы не получают overridden

static методы не получают overridden, но они могут быть в подклассе hidden.

Смежные вопросы