private
i membri possono accedere solo all'interno della classe in cui ware dichiarate. Quindi, se avete classe
class X{
private int field = 1;
private void method(){}
void foo(X x){
x.field = 2;
x.method(); // this is OK, because we are accessing members from instance of X
// via reference of class X (which is same class as this one)
}
void bar(Y y){// = lets assume that Y extends X
y.field = 3;
y.method(); // ERROR: we can't access `method()`
}
}
Come vedete non c'è permesso di accedere membro privato da classe derivata anche se siamo di classe all'interno in cui è stato dichiarato a questo utente.
Possibile ragione di questo è che i membri privati non sono ereditate all'interfaccia di classe derivata (che è una specie di scopo della private
modificatore di visibilità). A causa di ciò in tali classi è possibile ridichiarare questi membri qualsiasi autore modo vuole, per esempio, qualcuno potrebbe creare di classe come questo:
class Y extends X{
private String field = "foo";
private String method(){
return "bar";
}
}
Quindi, come potete vedere, è possibile che chiamando y.method()
si sta cercando di accesso method
dichiarato nella classe Y
, ma non è possibile accedervi dalla classe X
(a causa dell'incapsulamento). E questo è il compilatore di scenari ipotizza perché i campi e i metodi privati non sono polimorfi.
Per evitare questa confusione è necessario dichiarare esplicitamente che si vuole invocare membro privato da classe corrente X utilizzando colata
void bar(Y y){
((X)y).method();
}
Stessa cosa accade per <T extends A>
. Dal T
può essere qualsiasi sottoclasse di A
il compilatore non consentirà l'accesso ai suoi membri privati. Quindi sarà necessario lanciare di nuovo a A
class A<T extends A> {
private T one() { return (T) this;}
protected T two() { return (T) this;}
protected void three() { ((A)two()).one(); }
}
'T' è una certa classe che estende' A' ma potrebbe non essere una 'A' –
perché è protetto! così semplice. è l'esence di OO. ecco perché sull'oggetto usiamo i metodi per restituire una variabile invece di accedervi direttamente –
[Dalla bocca del cavallo] (https://docs.oracle.com/javase/tutorial/java/javaOO/accesscontrol.html). I bambini di una classe non possono accedere ai metodi privati dei loro genitori perché ... è così che è stato progettato il linguaggio. – snickers10m