Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 14
  1. #1
    Utente di HTML.it
    Registrato dal
    Jan 2005
    Messaggi
    420

    [java] visibilità delle classi in uno stesso package

    Salve a tutti,
    qualcuno mi saprebbe dire se i metodi di una classe dichiarati protected sono accessibili dalle classi all'interno di una stessa cartella (o package)..
    Se cosi fosse, se si crea un progetto non è meglio dichiarli sempre protected invece che public?
    the sALIEN

  2. #2
    I protected sono visibili alle classi dello stesso package e alle sotto classi di quella in cui sono dichiarati tali.

    Se cosi fosse, se si crea un progetto non è meglio dichiarli sempre protected invece che public?
    Come faresti poi ad accedere ad un metodo di una classe di un altro package?

  3. #3
    Utente di HTML.it
    Registrato dal
    Jan 2005
    Messaggi
    420
    thx.. rispondo alla tua domanda:

    Ho espresso quella mia considerazione perchè ho letto che è sempre meglio fare a meno di variabili public (nel senso di variabili globali) e dunque se so che queste classi che ho realizzato servono solo per quel progetto che ho costruito, non me ne faccio niente di accederci da altri packages..

    Ma non fa nel senso che se la mia classe con metodi protected si chiama ad es miaClasse, e ho un altra classe da un altra parte del disco fisso.. se io scrivessi import miaClasse, in pratica i metodi protected non gli potrei usare? in questo senso?
    the sALIEN

  4. #4
    Utente di HTML.it
    Registrato dal
    Jan 2005
    Messaggi
    420
    un altra cosa..

    Se ho una classe B che è stata ereditata da una classe A che disponeva di varibili d'istanza protected e metodi protected, questi metodi non potranno essere usati dalla classe B se questa si trova in un altro package vero?
    the sALIEN

  5. #5
    L'espressione "variabile globale" nel senso che ha per la programmazione procedurale è sbagliata riferita ad una variabile "public".
    E' consigliato ridurre le variabili public perchè "rompono" l'incapsulamento ed è quindi sempre consigliabile interfacciarsi con l'utante tramite dei metodi pubblici che facciano da tramite per far accedere l'utente alle strutture dati degli oggetti.

    se so che queste classi che ho realizzato servono solo per quel progetto che ho costruito, non me ne faccio niente di accederci da altri packages..
    E come fai ad accederci da altri packages dello stesso progetto?

    se io scrivessi import miaClasse, in pratica i metodi protected non gli potrei usare?
    Come abbiamo detto i metodi protected non sono accessibili da classi non appartenenti allo stesso package...

  6. #6
    Utente di HTML.it
    Registrato dal
    Jan 2005
    Messaggi
    420
    ma se io mi creo 30 classi e le metto tutte sullo stessa cartella, non è un unico package?
    Comunque, certo, hai ragione tu, sarebbe meglio farle pubbliche.. se no non sarebbero riutilizzabili.

    Poi, per caso, sai se sia possibile una sorta di overridding o overloading delle variabili?? (scusami se sto dicendo caxxate :P )

    In pratica ho scritto una classe MyClassA con una variabile d'istanza di questo tipo: protected prova; e un metodo public che la modificava (public void modifica(){prova = 3;}

    Ho scritto una nuova classe, MyClassB extends MyClassA con anch'essa una varabile d'istanza con lo stesso nome ma con diverso modificatore: private prova.
    Quando chiamo il metodo del costruttore dalla classe MyClassB in pratica non mi modifica la mia variabile prova della classe B.. sto pensando invece che modifichi la variabile di MyClassA..
    the sALIEN

  7. #7
    Ovviamente puoi mettere tutte le tue classi nella stssa dir e farle appartenere ad un unico package, in questo caso certamente il modificatore protected equivalrebbe al public nell'economia del progetto, se poi il tuo progettto/package dovrà essere usato insieme con altri package e non vuoi che questi possano accedere alle tue classi certamente definirle protected farà la differenza.

    Per quanto riguarda il caso che hai esposto, visto che dovrebbe essere poco codice, perchè non lo psoti così lo vediamo ?

  8. #8
    Utente di HTML.it
    Registrato dal
    Jan 2005
    Messaggi
    420
    il codice sono 6000 righe!!

    cmq è una cosa di questo tipo:
    codice:
    ClasseA
    {
    protected boolean var;
    
    ClasseA(){}
    
    boolean getVariabile{
    var = false;
    return var;
    }
    
    }
    
    ClasseB extends ClasseB
    {
    private boolean var;
    private int ciao;
    ClasseA(int a)
    {
    ciao = a
    var = true;
    }
    
    }
    Se io da un altra classe provo a istanziarmi un oggetto di ClasseB, allora se mi creo un oggetto ClasseB prova = new ClasseB(4); e poi scrivo prova.getVariabile(); e come se mi ritornasse il valore di var di ClasseA
    the sALIEN

  9. #9
    Utente di HTML.it
    Registrato dal
    Jan 2005
    Messaggi
    420
    ops, il costruttore è classB non classA e poi è CLassB extends ClassA
    the sALIEN

  10. #10
    Utente di HTML.it L'avatar di netarrow
    Registrato dal
    Apr 2004
    Messaggi
    1,425
    potevi editare no?

    codice:
    class ClasseA
    {
    protected boolean var;
    
    ClasseA(){}
    
    boolean getVariabile() {
    var = false;
    return var;
    }
    
    }
    
    class ClasseB extends ClasseA
    {
    private int ciao;
    ClasseB(int a)
    {
    ciao = a;
    var = true;
    }
    
    }
    
    public class Class {
    public static void main(String[] args) {
    ClasseB prova = new ClasseB(4);
    System.out.println(prova.getVariabile());
    }
    }
    devi togliere il

    private boolean var

    sennò la variabile della superclasse viene ofuscata da quella della sottoclasse e devi rocorrere a super per accederci.
    Se togli la variabile la classe si riferisce automaticamente a quella della superclasse.
    Inoltre è normale che ritorni il valore che gli da la classeA perchè var viene impostata a false da GetVariabile() che viene chiamato dopo il costruttore di ClasseB che lo imposta a true.

    Imparare è un'esperienza, tutto il resto è solo informazione. (Albert Einstein)

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 © 2025 vBulletin Solutions, Inc. All rights reserved.