Existují v Javě jasná pravidla, kdy použít jednotlivé modifikátory přístupu, konkrétně výchozí (package private), public
, protected
a private
, při vytváření class
a interface
a při práci s dědičností?
Oficiální výukový program vám může být užitečný.
______________________________________________________________ | │ Třída │ Balíček │ Podtřída │ Podtřída │ Svět | | │ │ │ │(stejný pkg)│(rozdílný pkg)│ | |───────────┼───────┼─────────┼──────────┼──────────┼────────| |public │ + │ + │ + │ + │ + │ + | |───────────┼───────┼─────────┼──────────┼──────────┼────────| |chráněné │ + │ + │ + │ + │ | |───────────┼───────┼─────────┼──────────┼──────────┼────────| |bez modifikátoru│ + │ + │ + │ │ | |───────────┼───────┼─────────┼──────────┼──────────┼────────| |soukromé │ + │ │ │ │ │ | |___________|_______|_________|__________|__________|________| + : přístupné prázdné : nepřístupné
Jednoduché pravidlo. Začněte tím, že vše prohlásíte za soukromé. A pak postupujte směrem k veřejnému, jakmile vyvstane potřeba a návrh si to vyžádá.
Při odhalování členů se ptejte, zda odhalujete volby reprezentace nebo volby abstrakce. První možnosti se chcete vyhnout, protože by zavedla příliš mnoho závislostí na skutečné reprezentaci spíše než na jejím pozorovatelném chování.
Obecně se snažím vyhnout přepisování implementací metod pomocí podtříd; je příliš snadné pokazit logiku. Pokud máte v úmyslu, aby byla přepsána, deklarujte abstraktní chráněné metody.
Při přepisování také používejte anotaci @Override, abyste při refaktorizaci věci nerozbili.