Nu börjar vi bli lite avancerade.
Det där har med åtkomstdeklaratorer att göra. Åtkomstdeklaratorerna i java är public, privat, protected och package.
De olika åtkomstdeklarationerna ger åtkomst till andra enligt följande lilla schema:
Spec |class|subclass|package|world
-----------+-----+--------+-------+-----
private | x | | |
protected | x | x* | x |
public | x | x | x | x
package | x | | x |
Private: Detta är den "strängaste". Den ger bara klassen själv tillåtelse att använda metoder eller variabler.
Om vi skapar två klasser Alpha och Beta så ser du att Beta inte kan komma åt variablerna i Alpha.
class Alpha {
private int iamprivate;
private void privateMethod() {
System.out.println("privateMethod");
}
} // Alpha
class Beta {
void accessMethod() {
Alpha a = new Alpha();
a.iamprivate = 10; // illegal
a.privateMethod(); // illegal
}
} // Beta
Protected: Denna modifiator gör att alla klasser i samma paket eller subklasser av denna klassen får åtkomst till variabeln eller metoden, förutom själva klassen då.
Denna är dock lite knepig.
Om vi modifierar våra klasser från Private:
package Greek;
public class Alpha {
protected int iamprotected;
protected void protectedMethod() {
System.out.println("protectedMethod");
}
}
package Greek;
class Gamma {
void accessMethod() {
Alpha a = new Alpha();
a.iamprotected = 10; // legal
a.protectedMethod(); // legal
}
}
Så lång är ingen underligt. Dom ligger i samma paket och kan därför komma åt varandras saker.
Vi gör en ny klass, Delta:
package Latin;
import Greek.*;
class Delta extends Alpha {
void accessMethod(Alpha a, Delta d) {
a.iamprotected = 10; // illegal
d.iamprotected = 10; // legal
a.protectedMethod(); // illegal
d.protectedMethod(); // legal
}
}
Denna ligger i ett annat paket. Den kommer åt Alphas saker eftersom den är en subklass men inte Betas eftersom den ligger i ett annat paket.
Public: Denna betyder att vem som helst får anropa metoden eller modifiera variabeln direkt genom att t.ex. skriva klassInstans.variabel = "modifierad".
Här är nästan allt tillåtet...
Package: Den här är lite som protected, men med skillnaden att även om det är en subklass, så måste klassen finnas i samma paket för att kunna få åtkomst.
Detta är vad som gäller för metoder och variabler...
Klassdeklaration:
=================
Insåg halvvägs att det inte alls var det ovanstående du frågade efter men tänkte att det kunde vara nyttigt i allafall.
Vi tittar lite på klassdeklarationer istället.
Den ser ut såhär:
[public|abstract|final] class <ClassName> [extends <SuperClass>] [implements] <Interface 1> <Interface 2> ... <Interface n> {
Classbody
}
Om man deklarerar en klass public kan vem som helst skapa en instans av den.
Om man deklarerar den abstract kan ingen skapa en instans av den. Den är till för att ärvas ifrån, antingen som interface eller som superklass.
Om man gör en final menar man att ingen får ärva från denna klass. Man kan göra public final men aldrig abstract final...
Om man inte skriver public menar man att klassen bara kan användas av klasser som ligger i samma paket som den deklarerade klassen.
Det mesta av materialet är hämtat (och nerkortat) från det utbildningsmaterial vi använder på Eneas "Grundkurs i Java". Denna baserar sig i sin tur på http://java.sun.com/docs/books/tutorial/java/TOC.html som är mycket bra läsning.
/Lime
------------------
Praeterea conseo microsoftenem esse delendam.
- modernt latinskt ordspråk
[Redigerat av Lime den 06 sep 2001]