140 likes | 288 Views
Kapittel 8. Arv. 8.1 Subklasser. Arv er å lage klasser som er basert på eksisterande klasser Arv er eit sentralt og viktig konsept i oo Som regel vil vi lage ein ny klasse som er ei spesialisering av ei anna Den nye klassen skal ha alt den andre har, pluss litt til
E N D
Kapittel 8 Arv
8.1 Subklasser • Arv er å lage klasser som er basert på eksisterande klasser • Arv er eit sentralt og viktig konsept i oo • Som regel vil vi lage ein ny klasse som er ei spesialisering av ei anna • Den nye klassen skal ha alt den andre har, pluss litt til • Det er dette tillegget som gjer klassen til ein spesiell variant av “foreldreklassen” • is-a forhold
Subklasser • Vi bruker arv for å • Støtte gjenbruk av programvare • Lage god design • Superklasse – subklasse • Bruk av det reserverte ordet extends for å indikere arv • Ein subklasse inneheld automatisk alle variable og metoder som finst i superklassen • Vi ser på Words-eksemplet
Subklasser • Bruk av protected • Subklassen arver alt, men har ikkje direkte tilgang til det som er private • Bruk av public bryt med innkapsling • Det som er protected er synleg kun for subklasser
Subklasser • Bruk av super • Kall til superklassen sine metoder • Blir ofte brukt til å kalle konstruktøren i superklassen • Kun i subklassen sin konstruktør • Alltid første kodelinje • Vi kan også kalle andre metoder (og variable) i superklassen • super.paintComponent(page); • Multippel arv – arv frå fleire klasser samtidig • Blir ikkje brukt i Java
8.2 Redefinering (overriding) av metoder • Ein subklasse kan redefinere metoder som finst i superklassen • Subklassen kan ha sin eigne implementasjon av metoden • Eventuelt kall til super() og eit tillegg • Viktig med logisk samanheng, slik at den redefinerte metoden har same meinigsinnhold i begge klasser • Skyggevariable • Ikkje bruk slike!
8.3 Klassehierarki • Ofte er det nok med to klasser, der den eine arver den andre • Til andre formål treng vi fleire klasser, kanskje med arv i fleire ledd • Dette gir eit hierarki av klasser • Object klassen er øverst i alle hierarki • Blir automatisk arva • toString() er definert her
Klassehierarki • Abstrakte klasser • Representerer eit generelt konsept som ikkje er fullstendig nok til å lage objekt av • Kan ikkje instansierast • Blir brukt som superklasse • Bruk av det reserverte ordet abstract • Klasser • Metoder • Inneheld vanlegvis abstrakte metoder • Kan elles innehalde det ein vanleg klasse har
Klassehierarki • Alle klasser med ein eller fleire abstrakte metoder må deklarerast som abstrakte • Abstrakte metoder må implementerast i subklassen • Abstrakte klasser kan samanliknast med interface • Arv kan også brukast for interface • Hierarki også av interface
8.4 Synlegheit • Alt blir arva • private medlemmer kan ikkje refererast av subklassen • public medlemmer kan refererast av alle • Vi kan bruke protected • FoodAnalyzer – eksemplet • Pizza arver FoodItem • Bruk av private medlemmer i FoodItem skjer kun inne i klassen • Vi får likevel ut det vi treng av informasjon • Ingen objekt av klassen FoodItem blir laga
8.5 Design og arv • Arv er ein viktig del av objektorientert utvikling og programmering • Pass på at vi får is-a forholdet mellom superklasse og subklasse • Subklassen skal vere ei spesialisering • Lag klassehierarki, plasser fellestrekk langt opp • Redefiner metoder etter behov, unngå skyggevariable • Bruk interface for å imitere multippel arv • Tenk på korleis abstract, public, protected, private bør brukast • Vi kan hindre arv ved å deklarere ein klasse som final
8.6 Klassehierarki for GUI • Alt er utvikla frå Component • Ein del av hierarkiet er vist i fig 8.7 • Mange abstrakte klasser • Arv i mange ledd • To måtar å lage GUI-komponentar • Bruke ferdigdefinerte klasser som f eks JRadioButton eller JLabel • Lage klasser som arver f eks JApplet eller JPanel • Bruk det som passer til situasjonen, dvs problemet
8.7 Arv frå adapter - klasser • Alternativ teknikk for å lage listener-klasser • I staden for å implementere interface kan vi arve frå adapter – klasser • Unngår å skrive inn tomme metoder for events vi ikkje er interesserte i • Som vanleg – bruk det som passer best
8.8 Timer • Finst i javax.swing – pakken • Ein slags usynleg GUI-komponent vi bruker for å generere hendingar over tid • Vi spesifiserer intervall og listener-objekt når vi opprettar Timer-objekt • Koden i actionPerformed() i listener-klassen avgjer korleis vi vil reagere på det som skjer • Rebound - eksemplet