2014-10-12 6 views
1

Я просто играю вокруг создания программы. У меня есть абстрактный класс Foo (реализует OtherThing) и панель классов, которая расширяет Foo. Я планирую иметь несколько других классов, которые расширяют Foo и хотят, чтобы у них у всех был метод Static.Java Class расширяет абстрактный класс, но должен иметь статический метод

Мне нужен любой класс, который расширяет Foo, чтобы иметь этот метод, чтобы моя фабрика создала класс для работы. Я могу вручную добавить статический метод в каждый класс, который ему нужен. Каждый класс Bar создаст немного другую карту. Я попытался добавить статический метод как к интерфейсу класса OtherThing, так и к абстрактному классу Foo. Любой способ сделать это, или я застрял, добавляя этот метод в каждый класс, который мне нужен. Я знаю, что это не очень сложно, просто предпочтет заставить этот метод быть там.

+0

В какой сценарий является его * необходимо * для класса в иметь статический метод? –

+0

@OliverCharlesworth, например, если вы хотите иметь счетчик экземпляров? – Andres

+0

@ Andres: Это внутренняя деталь реализации. Невозможно вызвать статический метод полиморфным способом (если только вы не включите отражение), поэтому какое использование было бы для обеспечения этого из интерфейса? –

ответ

0

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

Просто для того, чтобы помнить: статические методы класса не должны использоваться для моделирования поведения объекта, допустимые. Случаи использования для статического метода - это обычные подпрограммы, которые не управляют состоянием базового объекта. Если вы не знакомы с объектно-ориентированным дизайном, стоит посмотреть, чтобы сделать код более удобным.

Я ваш случай использования, если вы хотите, чтобы вызвать статический метод из Foo в баре вы можете просто позвонить Foo.staticMethod() в баре:

public abstract class Foo implements OtherThing {//....} 

public class Bar extends Foo{ 
    public static Map<Enum, List<AnotherEnum> getSomeThingMap(){ 
    create someThingMap; 

    //Call your static Method from Foo here 
    Foo.staticMethod() 
    someThingMap.put(Enum, List<AnotherEnum>); 
    return someThingMap; 
    } 
} 
+0

Я думал об этом, единственная проблема заключается в том, что у меня есть несколько классов, таких как Bar, например Bar_1, Bar_2 Bar_2_1, это различия в вариациях/модели, которые могут иметь небольшие отличия. Такие вещи, как максимальный угол поворота оружия, если руки заканчиваются в руке 5 пальцами или коготь. –

+0

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

+0

Вы можете создать один центральный статический класс, который содержит все необходимые операции, это будет работать. Или вы пытаетесь использовать дженерики, которые передают некоторое поведение вашим классам. – dice89