PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : protected in Java?



iGEL
18-01-2002, 17:46
Moin!

Ich bin leicht verwirrt. Bisher dachte ich, dass ich, um auf eine "protected" Methode zuzugreifen, meine Klasse von der Klasse abgeleiten muss. Hier mein Code (Ausschnitt):


import java.util.*;

class dateHandle extends GregorianCalendar
{
public static String getDateStringFromMillis(long millis)
{
GregorianCalendar cal = new GregorianCalendar();
int MillisToGMT = cal.get(cal.ZONE_OFFSET);
cal.setTimeInMillis(millis + MillisToGMT);

Calendar enthält die Methode setTimeInMillis(long), die allerdings Protected ist (Was für mich auch nicht gerade verständlich ist, aber egal). Da Calendar abstakt ist (es gibt schliesslich verschiedene Arten von Kalendern), leite ich meine Klasse von GregorianCalendar ab. Trotzdem bekomme ich diese Fehlermeldung:


test.java:12: setTimeInMillis(long) has protected access in java.util.Calendar
cal.setTimeInMillis(millis + MillisToGMT);
^
1 error

Was mach ich falsch? Danke!

cu Johannes

Doc Maverick
18-01-2002, 19:04
Hi,
tja, leider hat die Eigenschaft protected noch weitreicherende Folgen für eine Klasse, als für eine Objektvariable!
Protected-Klassen lassen sich nur noch von Klassen desselben Packages ansprechen (möglicherweise muß diese Klasse sogar in derselben Quellcode-Datei befinden?!?).
Du könntest den enormen Umweg gehen und die Datei wo Deine Klasse drinsteht als "package java.util;" deklarieren.
Tschö.

anda_skoa
18-01-2002, 22:31
Original geschrieben von Doc Maverick
Hi,
tja, leider hat die Eigenschaft protected noch weitreicherende Folgen für eine Klasse, als für eine Objektvariable!
Protected-Klassen lassen sich nur noch von Klassen desselben Packages ansprechen (möglicherweise muß diese Klasse sogar in derselben Quellcode-Datei befinden?!?).
Du könntest den enormen Umweg gehen und die Datei wo Deine Klasse drinsteht als "package java.util;" deklarieren.


Nein, das hast du falsch verstanden.
protected schränkt den Zugriff nicht nur auf abgeleitete Klassen ein, sonder erlaubt auch Klassen im selben Package den Zugriff.

Wäre protected nur innerhalb des Packages gültig (und sonst wie private) könnte man keine Javaklasse sinvollerweitern.

Das Problem ist wie folgt:
protected heißt du kannst auf Elemente in deiner Instanz zugreifen (bzw. auf statische Elemente in der Klasse) die in deiner Superklasse defineirt sind.

Da setTimeInMillis nicht statisch ist, kannst du nur auf diese Methode von "dir selbst" zugreifen


import java.util.*;

class dateHandle extends GregorianCalendar
{
public static String getDateStringFromMillis(long millis)
{
// es ginge natürlich auch dateHandle cal = new dateHandle();
GregorianCalendar cal = new dateHanlde();
int MillisToGMT = cal.get(cal.ZONE_OFFSET);
cal.setTimeInMillis(millis + MillisToGMT);


Ciao,
_

iGEL
19-01-2002, 13:06
Moin!

Ah, danke! Jetzt hab ich das verstanden. Ich hatte erstmal den Umweg über Date gewählt (setTime() hat dort die selbe Funktion, ist aber nicht protected), aber so ist es ja effizienter.

Also, danke nochmal,
Johannes