Første |
|
|
Klassedefinitioner - adgangskontrol serie, Planche nr. 22 |
 |
Udskrift af : Klassedefinitioner - adgangskontrol
|
Planche 1 : Klassedefinitioner - adgangskontrol
Erklæringer af
- Klasser
- klassevariable (static)
- automatiske variable (local)
- modifiers
Planche 2 : Modifiers
"simple modifiers"
- abstract
- final
- static
- native
"Access modifiers"
- public
- protected
- package ("friendly")
- private
Planche 3 : Abstract og Final
- Abstract
- Klasser og metoder
- Du SKAL udvide abstract-erklærede
- Final
- Klasser, metoder og data
- Du KAN IKKE udvide final-erklærede
Planche 4 : Abstract
- Klasser
- abstract-klasser kan ikke realisere et objekt
- Kun en ikke-abstrakt underklasse kan realiseres
- En klasse, der ikke implementere et interface helt, skal være abstract
- Metoder
- abstract-metoder har ikke nogen blok
- eks.: abstract void skiftGear();
- Hvis blot en metode er abstract må hele klassen også være det!
Planche 5 : Abstract eksempel:
Vores Cykelklasse (fra igår)
abstract class Cykel {
public abstract void skiftGear();
}
Vi bliver nød til at lave underklasser, f.eks.:
class MountainBike extends Cykel {
public void skiftGear() {
this.skift12gear();
}
}
// eller
class Tandem extends Cykel {
public void skiftGear() {
this.skift10gear();
}
}
Planche 6 : Final
- En final class må ikke udvides
- En final metode må ikke overskrives
- En final variabel må ikke ændres
- ... Når den først er initialiseret!
Eksempel på variabel:
final int count = 0;
Planche 7 : Static data
static variabel er knyttet til klassen - ikke afledte objekter
Kaldes klassevariable
Variablen findes kun en gang - uanset hvor mange objekter der laves
Variablen kan læses både vhj. af klassenavnet og en reference til et objekt af klassen.
class Tandem extends Cykel {
static int antalTandem;
...
}
// både
Tandem.antalTandem = 0;
// og
Tandem tn = new Tandem();
tn.antalTandem++
Sidstnævnte FRARÅDES!
Planche 8 : Static metoder
- static metoder kan kun læse og skrive static variable i samme klasse!
- static metoder kan kun kalde static metoder i samme klasse!
- static metoder har ikke nogen this-reference
- static metoder kan kaldes via klassenavn eller objektreference
Planche 9 : Native metoder
Kun metoder kan være native
- native metoder kalder ud af JVM
- svarer til abstract definitioner (uden definitionsblok)
- native metoder bruges KUN i nødstilfælde...
Planche 10 : Adgangkontrol - access modifiers
Også kendt som de 4 P'er
Adgangskontrol bestemmer hvilke klasser der må:
- indlæse klasser
- læse/skrive variable
- kalde metoder
Klasser kan kun være 'public' eller "venlig" (Package)
Variable og metoder kan være alle 4 ting.
Planche 11 : De 4 p'er
- Package ("venlig")
- public
- private
- protected
Planche 12 : Package
Default - når intet er angivet
Klasser, metoder og variable kan nås fra alle klasser i samme pakke
Kodeord: kan ikke angives
Planche 13 : Private
Metoder og variable er kun tilgængelige i den klasse, hvor de er defineret.
Kodeord: private
Planche 14 : Public
Metoder, variable og klasser er tilgængelige overalt i java-systemet.
Kodeord: public
Planche 15 : Protected
Styrer forholdet mellem en klasses superklasser og subklasser
Metoder, variable og klasser er tilgængelige for alle klasser i samme
pakke, samt for subklasser af den pågældende klasser.
Kodeord: protected
Planche 16 : Adgangsrækkefølge
- 1. private
- 2. "friendly"
- 3. protected
- 4. public
4 -> 1 - mere restriktiv
1 -> 4 - friere adgang
Hvorfor er det vigtigt?
Planche 17 : Polymorfing!!!
- Et navn - mange udtryk
- Navnet er et metode-navn
- Erklæret i superklasser eller interfaces
- Udtrykket er metode-implementeringen
- Defineret i aktuel klasse eller underklasser
Planche 18 : Vores cykel-eksempel
Hvis vi har en (abstract) klasse Cykel...

Den må vi udvide for at få lov til at realisere...

Planche 19 : Modelering i software
abstract class Cykel {
public abstract void skiftGear(boolean trinOp);
}
Forskellege ikke-abstract klasser
class MountainBike extends Cykel {
public void skiftGear(op) {
int i = getGear();
if (op)
this.set12gear(++i);
else
this.set12gear(--i);
}
}
// eller
class Tandem extends Cykel {
public void skiftGear(op) {
if (op)
this.skift10gear(1);
else
this.skift10gear(-1);
}
}
// eller også
class BørneCykel extends Cykel {
public void skiftGear(op) {
sigLyd("Nyøøn Nyøøhhhn!");
}
}
Planche 20 : Skift gear!
Uanset hvad man "skifter gear" på
Får man den rigtige reaktion...
...
public void setHøjereGearing(Cykel ck) {
ck.skiftGear(true);
}
...
Planche 21 : Adgang og overskrivning
En metode må ikke overskrives med en mere restriktiv definition!!!
Eksempel:
Hvad ville der ske, hvis en af metodedefinitionerne skiftGear var private?
Planche 22 : Main metoden
Vigtigt eksempel på brug af modifiers - main SKAL findes i en aplikationsklasse.
- public static void main (String argv[]);
(argv kan være et vilkårligt navn - resten skal matche præcist)
- public så runtime-systemet kan finde metoden
- static, så der ikke skal realiseres objekter først
- void, fordi der ikke returneres status
- main er metodens navn
- String-vektoren er parametre EFTER klassenavn:
java ProgramNavn Parameter1 Parameter2
Når main er kaldt, vil argv[0] indeholde teksten "Parameter1", argv[1] "Parameter2"
© 2000 BLA*net - Leif E. Andersen,
leander@blanet.dk
Første |
|
|
Klassedefinitioner - adgangskontrol serie, Planche nr. 22 |