Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 11
  1. #1
    Utente di HTML.it
    Registrato dal
    Oct 2003
    Messaggi
    1,258

    [java] modificatori di visibilità

    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

  2. #2
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,304
    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:
    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!
       }
    }
    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

  3. #3
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,296
    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.
    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.

    Ciao!
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Twitch | Altro...

  4. #4
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,304
    Originariamente inviato da alka
    Se non sbaglio, il modificatore protected rende il membro accessibile a qualsiasi classe discendente, anche di package differente;
    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:
    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);
       }
    }
    L'istruzione in grassetto solleva questo errore:
    «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

  5. #5
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,296
    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.
    Confermo. Sono abituato a lavorare in altri linguaggi ove non esiste questo tipo di protezione.

    Ciao!
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Twitch | Altro...

  6. #6
    Utente di HTML.it
    Registrato dal
    Oct 2003
    Messaggi
    1,258
    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:

    codice:
    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!
       }
    }
    e funziona...è come se fosse pubblica per la classe B
    credo che protected abbia un senso solo usando i package.
    Che ne dite?

  7. #7
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,304
    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

  8. #8
    Utente di HTML.it
    Registrato dal
    Oct 2003
    Messaggi
    1,258
    grazie..era proprio la risposta che cercavo.

  9. #9
    Ovviamente funziona anche se si estende la classe.
    Faccio un esempio:

    ClasseA
    codice:
    public class ClasseA {
        
    protected String s = "ciao";
    
        public ClasseA(){
        }
        
    }
    ClasseB
    codice:
    public class ClasseB extends ClasseA{
    
    private String st;
        
        public ClasseB(){
            st = super.s;
        }
        
        public void stampa(){
            System.out.println(st);
        }
    }

  10. #10
    Utente di HTML.it
    Registrato dal
    Oct 2003
    Messaggi
    1,258
    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?

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.