Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 15
  1. #1
    Utente di HTML.it
    Registrato dal
    Apr 2015
    Messaggi
    81

    attributi di una classe ed ereditarietà

    salve a tutti. ho un dubbio riguardo l'ereditarietà:
    c'è un modo per far si che alcuni attributi della classe padre non vengono ereditati dalle classi figlie?
    grazie a tutti per l'aiuto

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da simo9115 Visualizza il messaggio
    salve a tutti. ho un dubbio riguardo l'ereditarietà:
    c'è un modo per far si che alcuni attributi della classe padre non vengono ereditati dalle classi figlie?
    grazie a tutti per l'aiuto
    "attributo" è un termine un po' generico. O si parla di variabili di istanza o di metodi di istanza.
    E comunque "ereditare" in una sottoclasse alla fin fine significa poter "vedere" quel certo membro (campo o metodo che sia) della super-classe. E quindi dipende solo dal livello di accesso ed eventualmente dalla disposizione dei package (se il membro ha il livello default o protected).
    Un campo/metodo private NON è mai "ereditato".
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  3. #3
    Utente di HTML.it
    Registrato dal
    Apr 2015
    Messaggi
    81
    Quote Originariamente inviata da andbin Visualizza il messaggio
    "attributo" è un termine un po' generico. O si parla di variabili di istanza o di metodi di istanza.
    E comunque "ereditare" in una sottoclasse alla fin fine significa poter "vedere" quel certo membro (campo o metodo che sia) della super-classe. E quindi dipende solo dal livello di accesso ed eventualmente dalla disposizione dei package (se il membro ha il livello default o protected).
    Un campo/metodo private NON è mai "ereditato".
    hai ragione. per essere preciso mi riferisco alle variabili. quindi se io metto private String ciao di una classe A, la classe B, che estende A, non eredita la stringa ciao giusto?

  4. #4
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da simo9115 Visualizza il messaggio
    hai ragione. per essere preciso mi riferisco alle variabili. quindi se io metto private String ciao di una classe A, la classe B, che estende A, non eredita la stringa ciao giusto?
    Giusto, non la "eredita" nel senso che la variabile private B non la vede proprio.

    Dal Java Language Specification:

    A private class member or constructor is accessible only within the body of the top level
    class (§7.6) that encloses the declaration of the member or constructor. It is not inherited
    by subclasses
    .
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  5. #5
    Utente di HTML.it
    Registrato dal
    Apr 2015
    Messaggi
    81
    allora detto ciò meglio che spiego qual'è il mio problema perchè veramente nn sto ricavando un ragno da un buco.
    Ho una classe "procelement" ,che viene estesa da circa 2 classi: Task; SendTask. Mi viene chiesto di implementare un metodo "crea array" di una classe "Prova"(avente come variabili ArrayList<Task>; ArrayList<SendTask>") in cui devo costruire un arraylist di procelement. Questo deve essere utilizzato da un altro metodo(chiamato "populate") in modo da verificare che tipo di oggetto è e poterlo inserire nell'arrayList specifo a quell'oggetto. come posso fare per fare questo? io ho pensato di creare l'oggetto nella classe procelement inserirlo in un arrayList di proclement e passarlo al metodo populate che verifica di che istanza è gli oggetti nell'arrayList solo che non mi fa aggiungere (giustamente) un oggetto di tipo procelement nell'arrayList<Task>/arrayList<SendTask>
    Ultima modifica di simo9115; 03-05-2016 a 11:08

  6. #6
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da simo9115 Visualizza il messaggio
    Ho una classe "procelement" ,che viene estesa da circa 2 classi: Task; SendTask. Mi viene chiesto di implementare un metodo "crea array" di una classe "Prova"(avente come variabili ArrayList<Task>; ArrayList<SendTask>") in cui devo costruire un arraylist di procelement.
    Scusa ma così non ha molto senso (né è granché chiaro). Se un ArrayList è parametrizzato <Task> o <SendTask> e questi due tipi sono sotto-tipi di questa ProcElement (o come l'hai chiamata) .... allora vuoi dire che il ArrayList così parametrizzato NON può contenere oggetti istanziati come ProcElement.
    ArrayList<Task> può solo contenere oggetti Task o sotto-tipi di Task. Non qualcosa che è un super-tipo di Task.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  7. #7
    Utente di HTML.it
    Registrato dal
    Apr 2015
    Messaggi
    81
    Quote Originariamente inviata da andbin Visualizza il messaggio
    Scusa ma così non ha molto senso (né è granché chiaro). Se un ArrayList è parametrizzato <Task> o <SendTask> e questi due tipi sono sotto-tipi di questa ProcElement (o come l'hai chiamata) .... allora vuoi dire che il ArrayList così parametrizzato NON può contenere oggetti istanziati come ProcElement.
    ArrayList<Task> può solo contenere oggetti Task o sotto-tipi di Task. Non qualcosa che è un super-tipo di Task.
    appunto quello che penso pure io...però quello sopra riportato è quello che mi è stato detto di fare...è per questo che chiedo aiuto in modo che posso trovare una soluzione a questo problema

  8. #8
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da simo9115 Visualizza il messaggio
    in modo da verificare che tipo di oggetto è e poterlo inserire nell'arrayList specifo a quell'oggetto.
    Rileggendo questa frase, allora la questione è questa. Innanzitutto non so se la ProcElement è astratta o no. E se non lo è, se andrai ad istanziare oggetti ProcElement.

    Se i tuoi oggetti istanziati sono solo dei Task o SendTask e un tuo metodo li "vede" solo come tipo ProcElement (insomma a livello più generico), allora può avere senso andare a verificare che tipo di oggetto è realmente (Task o SendTask), quindi fare un cast e inserirlo nel rispettivo ArrayList. Questo sì, è possibile. Se un oggetto è realmente un Task, allora ha senso ed è lecito metterlo in un ArrayList<Task> !
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  9. #9
    Utente di HTML.it
    Registrato dal
    Apr 2015
    Messaggi
    81
    ti posto il codice così capisco meglio:
    codice:
    public void populate(ArrayList<ProcElement> ListProcElem)
    	{	
    		for(int i=0; i<ListProcElem.size(); i++)
    		{
    			
    		if(ListProcElem.get(i) instanceof Task)
    			{
    			this.Task.add(ListProcElem.get(i));
    			
    			}else if(ListProcElem.get(i) instanceof SendTask)
    			{
    				SendTask sendtask1 = new SendTask();
    				this.SendTask.add(sendtask1);							
    			}
    		}
    ora come lo dovrei scrivere il cast?

  10. #10
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Ti suggerisco di:
    - NON mettere variabili (di istanza o altro che siano) che hanno lo stesso identico nome di una classe. Ovvero quei campi potresti chiamarli es. sendTasks o sendTaskList ma non SendTask
    - usare il for-each, che ti semplifica un pochino

    Per fare un cast: (Tipo) valore

    Infine, non ho capito perché nel secondo caso istanzi un nuovo SendTask. Non lo devi mica istanziare ... devi usare l'oggetto i-esimo.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

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.