Hola gente!
Parliamo di modificatori di visibilità.
Ho una classe che contiene altre classi dichiarate protected, insieme a variabili e metodi anch'essi protected.
Quale è il senso? Quando è il caso di usare questo prefisso?
GRAZIE 1000
Hola gente!
Parliamo di modificatori di visibilità.
Ho una classe che contiene altre classi dichiarate protected, insieme a variabili e metodi anch'essi protected.
Quale è il senso? Quando è il caso di usare questo prefisso?
GRAZIE 1000
Il modificatore protected fa sì che l'oggetto dichiarato tramite questo modificatore sia accessibile da qualsiasi parte del codice di una classe che faccia parte del package della classe che contiene l'oggetto. Esempio:
Ciao.codice:------ Classe A.java ------ package mioPackage; public class A { protected int VALORE; public A(int v) { VALORE = v; } } ------ Classe B.java ------ package mioPackage; public class B { public static void main(String [] ar) { A uno = new A(8); System.out.println(uno.VALORE); // <- lo posso fare! } }
"Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza
Se non sbaglio, il modificatore protected rende il membro accessibile a qualsiasi classe discendente, anche di package differente; lo scopo principale è quello di rendere estensibile una classe, ma impedire che l'utilizzatore diretto di quella classe che beneficia delle funzionalità offerte dalle istanze acceda a metodi che non dovrebbero essere chiamati direttamente.Originariamente inviato da LeleFT
Il modificatore protected fa sì che l'oggetto dichiarato tramite questo modificatore sia accessibile da qualsiasi parte del codice di una classe che faccia parte del package della classe che contiene l'oggetto.
Ciao!
MARCO BREVEGLIERI
Software and Web Developer, Teacher and Consultant
Home | Blog | Delphi Podcast | Twitch | Altro...
No. Anche se una classe estende la classe che contiene l'oggetto protected, essa non può accedere a tale membro se non fa parte dello stesso package. Questo codice, ad esempio, non viene compilato:Originariamente inviato da alka
Se non sbaglio, il modificatore protected rende il membro accessibile a qualsiasi classe discendente, anche di package differente;
L'istruzione in grassetto solleva questo errore:codice:package A; public class ClasseA { protected int VALORE; public ClasseA(int v) { VALORE = v; } } ------------------------------- package A.B; import A.*; public class ClasseB extends ClasseA { public ClasseB() { super(0);} public static void main(String [] ar) { ClasseA ca = new ClasseA(5); System.out.println(ca.VALORE); } }
«VALORE has protected access in A.ClasseA»
Ciao.
"Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza
Confermo. Sono abituato a lavorare in altri linguaggi ove non esiste questo tipo di protezione.Originariamente inviato da LeleFT
No. Anche se una classe estende la classe che contiene l'oggetto protected, essa non può accedere a tale membro se non fa parte dello stesso package.
Ciao!
MARCO BREVEGLIERI
Software and Web Developer, Teacher and Consultant
Home | Blog | Delphi Podcast | Twitch | Altro...
Ok Lele, graxie..pero a me non è mai capitato di usare i package. Metto tutte le classi in un uniko file.
Ho provato a fare cosi:
e funziona...è come se fosse pubblica per la classe Bcodice:class A { protected int VALORE; public A(int v) { VALORE = v; } } public class B { public static void main(String [] ar) { A uno = new A(8); System.out.println(uno.VALORE); // <- lo posso fare! } }
credo che protected abbia un senso solo usando i package.
Che ne dite?
Sì... non vedo altri motivi per usare questo modificatore.
Ciao.
"Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza
grazie..era proprio la risposta che cercavo.
Ovviamente funziona anche se si estende la classe.
Faccio un esempio:
ClasseA
ClasseBcodice:public class ClasseA { protected String s = "ciao"; public ClasseA(){ } }
codice:public class ClasseB extends ClasseA{ private String st; public ClasseB(){ st = super.s; } public void stampa(){ System.out.println(st); } }
Ciao Lancill, molto bello anke il tuo esempio.
Riassumendo, si puo accedere alle variabili protette:
1)sia da sottoclassi
2)che da classi che si trovano nello stesso pacchetto.
chiedo ancora qualcosa: piu classi che si trovano in un file - è o no un pacchetto?
se fosse una var pubblica guadagnerei solo sul fatto che puo essere vista da un altro pacchetto o sbaglio?