Je problém mít třídu, ve které je metoda main, celou statickou? Tzn.: privátní statické atributy (ne nutně final) a privátní statické metody.
V případě prototypu to problém není. V případě ostrého kódu už ano, protože tu třídu už nedokážete použít jiným způsobem (oddědit, použít části kódu jinde, otestovat). Privátní statické mutable atributy znamenají, že v té třídě držíte stav, udělal jste z ní jedináčka, a nedokážete zařídit, abyste měl několik instancí té třídy s různým stavem v jedné aplikaci.
Půjdu ještě dál: dal bych celou třídu jako abstract. Jen tak, nikdy se nebude vytvářet její instance, tak proč ji nemít abstract. Je to ok?
Není. Abstract znamená, že ta třída bude mít potomky, které upřesňují nějaké chování. Tedy přesný opak toho, co chcete udělat. Pokud se nemají vytvářet instance třídy, použijte privátní konstruktor.
Mám nějakou kořenovou abstraktní třídu. je problém si do ní dát pár statických metod jako utilitky, které nějak souvisí s děděnými třídami?
Problém to není, ale je to něco jiného, než popisujete dále. Pokud jsou to nestavové metody, pak je to správně.
Třeba budu chtít generovat speciální posloupnost číslic, dám to do této abstraktní třídy jako statickou public metodu.
Tohle už správně není, protože pro generování té posloupnosti číslic potřebujete držet stav. A co když těch posloupností budete chtít generovat víc? Nebo to generování budete chtít parametrizovat?
Prvotně je to "utilitka" pro potomky, ale třeba ji bude chtít použít i nějaká jiná třída, tak proč ji nemít static public. Je to velký problém? Jasně, mělo by se to dát zvlášť do nějakých Utils.
Pokud ji bude chtít použít i jiná třída, nebude chtít ta třída záviset na jiné třídě, která dělá úplně něco jiného, a jen tak mimochodem exportuje nějakou užitečnou metodu.
Ale co když potřebuju jen 2 takové metody, vytvářet kvůli tomu zbytečně další třídu nějakých konkrétních Utils pro konkrétní sadu tříd? Ve které pak budou jen 1 nebo 2 metody?
Co znamená „vytvářet zbytečně třídu“? Vy ty třídy kupujete na kusy? Nebo musíte o vytvoření třídy požádat nadřízeného? Vytvoření třídy je triviální věc, třídy se nevytvářejí podle toho, jestli máte pocit, že máte málo nebo hodně tříd, ale tak, abyste měl u sebe kód, který spolu souvisí, a neměl u sebe kód, který spolu nesouvisí.