Visualizzazione dei risultati da 1 a 9 su 9
  1. #1
    Utente di HTML.it
    Registrato dal
    Nov 2010
    Messaggi
    60

    [Java] Domanda ereditarietà

    Salve,
    se io voglio creare una classe A, poi voglio estenderla con una classe subA, gli attributi di A devono per forza essere protected (o package o public) perché possano essere "visti" anche dalla classe subA?

    Grazie.

  2. #2
    Utente di HTML.it L'avatar di oronze
    Registrato dal
    Jun 2001
    Messaggi
    3,543

    No ai layout tabellari!

    Insulto libero: http://forum.html.it/forum/showthread.php?s=&postid=12524872#post12524872

  3. #3
    Utente di HTML.it
    Registrato dal
    Nov 2010
    Messaggi
    60
    Ma io cosi nel main posso accedere agli attributi facendo:

    oggetto.attributo

    e io non voglio che questo sia possibile.
    come si fa?

  4. #4
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,328
    Originariamente inviato da bandofa
    Ma io cosi nel main posso accedere agli attributi facendo:

    oggetto.attributo

    e io non voglio che questo sia possibile.
    come si fa?
    Non ho ben capito... solo se sono pubblici ci si accede con quella notazione, altrimenti no.
    Se non vuoi che la sottoclasse abbia quel tipo di accesso, si mettono privati.
    Ma mi sa che hai un bel po' di confusione in testa...

    Per fugare i dubbi: http://download.oracle.com/javase/tu...sscontrol.html

    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
    Utente di HTML.it
    Registrato dal
    Nov 2010
    Messaggi
    60
    Forse mi sono espresso male.
    Io ho una classe A con attributo1 protected.
    La classe subA estende A.

    Nel main, se creo una istanza di A e faccio:

    istanzaDiA.attributo1 = 10 (esempio casuale)

    me lo da per giusto.
    Ma io non voglio che questo sia possibile (voglio che sia modificabile solo tramite metodo di A), quindi metto attributo1 private.
    Mettendolo private, la classe subA non lo vede. Quindi chiedevo se c'era un modo per far si che attributo1 sia visibile da una qualsiasi sottoclasse di A, ma che non sia modificabile così liberamente come nell'esempio.

  6. #6
    Dove si trova la classe main? Se si trova nella classe A è ovvio che te lo fa fare, ma prova ad accedere allo stesso modo da un'altra classe e vedrai che ciò non è possibile.
    "Mai discutere con un idiota. Ti trascina al suo livello e ti batte con l'esperienza." (Oscar Wilde)

  7. #7
    Utente di HTML.it
    Registrato dal
    Nov 2010
    Messaggi
    60
    Il main si trova dentro una classe a parte (con lo stesso nome del progetto), che contiene solo il main, dove all'interno del main creo un istanza di A, tramite la quale, facendo istanzaDiA.attributo = nuovoValore ne modifico l'attributo.

  8. #8
    Utente di HTML.it
    Registrato dal
    Feb 2007
    Messaggi
    4,157
    allora se vuoi un accesso "controllato" agli attributi puoi fare una cosa:

    1. rendere private gli attributi
    2. creare i metodi getter e setter per ogni attributo

    in questo caso nelle sottoclassi l'accesso agli attributi avviene per forza di cose in modo controllato attraverso getter e setter.
    Questo è il principio base dell'encapsulation

  9. #9
    Originariamente inviato da bandofa
    Il main si trova dentro una classe a parte (con lo stesso nome del progetto), che contiene solo il main, dove all'interno del main creo un istanza di A, tramite la quale, facendo istanzaDiA.attributo = nuovoValore ne modifico l'attributo.
    Questo perchè la classe contenente il main si trova nello stesso package della classe A. Da un'altro package gli attributi non sono accessibili direttamente.

    P.S.
    Il modo corretto di procedere è come ti ha indicato Valia. Attributi privati e metodi getter e setter pubblici o protetti.
    "Mai discutere con un idiota. Ti trascina al suo livello e ti batte con l'esperienza." (Oscar Wilde)

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.