Onko Javassa olemassa selkeitä sääntöjä siitä, milloin kutakin käyttöoikeusmuuttujaa, eli oletusarvoa (package private), public
, protected
ja private
, käytetään, kun tehdään class
ja interface
ja käsitellään periytymistä?
Virallinen opetusohjelma voi olla sinulle hyödyksi.
______________________________________________________________ | │ Luokka │ Paketti │ Alaluokka │ Alaluokka │ Maailma | | │ │ │ │(sama pkg)│(eri pkg)│ | | |───────────┼───────┼─────────┼──────────┼──────────┼────────| |julkinen │ + │ + │ + │ + │ + │ + │ + + | |───────────┼───────┼─────────┼──────────┼──────────┼────────| |protected │ + │ + │ + │ + │ + │ + │ + │ | |───────────┼───────┼─────────┼──────────┼──────────┼────────| |no modifier│ + │ + │ + │ + │ + │ │ | | |───────────┼───────┼─────────┼──────────┼──────────┼────────| |private │ + │ │ │ │ │ │ │ | | |___________|_______|_________|__________|__________|________| + : saavutettavissa tyhjä : ei saavutettavissa
Helppo sääntö. Aloita ilmoittamalla kaikki yksityiseksi. Siirry sitten kohti julkisuutta sitä mukaa kuin tarve vaatii ja suunnittelu sitä edellyttää.
Kun paljastat jäseniä, kysy itseltäsi, paljastatko esitysvalintoja vai abstraktiovalintoja. Ensin mainittua kannattaa välttää, koska se tuo liikaa riippuvuutta varsinaiseen esitystapaan eikä sen havaittavaan käyttäytymiseen.
Yleissääntönä yritän välttää metodien toteutusten ohittamista aliluokittelemalla; se on liian helppoa pilata logiikka. Ilmoita abstrakteja suojattuja metodeja, jos aiot, että ne voidaan ohittaa.
Käytä myös @Override-merkintää, kun ylikäännät, jotta asiat eivät rikkoudu, kun korjaat niitä.