ho una classe denominata A in package1 e un'altra classe denominata C in package2. Classe C estende la classe A.intesa di Java
A ha una variabile di istanza che viene dichiarata in questo modo:
protected int protectedInt = 1;
Ecco il codice per la classe A
package package1;
public class A {
public int publicInt = 1;
private int privateInt = 1;
int defaultInt = 1;
protected int protectedInt = 1;
}
E qui è il codice per la classe C :
package package2;
import package1.A;
public class C extends A{
public void go(){
//remember the import statement
A a = new A();
System.out.println(a.publicInt);
System.out.println(a.protectedInt);
}
}
Eclipse sottolinea l'ultima riga in C.go() e dice "A.protectedInt" non è visibile. Sembra che questo sia in conflitto con la definizione della parola chiave "protetta", fornita nella documentazione di Oracle.
Il modificatore protetto specifica che è possibile accedere al membro solo all'interno del proprio pacchetto (come con package-private) e, inoltre, da una sottoclasse della relativa classe in un altro pacchetto.
Cosa sta succedendo qui?
In tal caso, perché java ha un modificatore protetto? Non sarebbe sufficiente rendere l'estensione A C sufficiente a renderlo non visibile a C? – mahela007
@ mahela007: Non senza che sia 'protected', no - se fosse visibilità predefinita (pacchetto) o' private', non sarebbe visibile. –
Hmm ... La parte enfatizzata nella tua risposta dice "l'accesso è permesso se E è una sottoclasse se S" .. Ma nel mio esempio, C è una sottoclasse di A..e non riesco ancora ad accedere alla variabile protetta. – mahela007