Visualizzazione dei risultati da 1 a 3 su 3
  1. #1
    Utente di HTML.it
    Registrato dal
    Sep 2006
    Messaggi
    171

    chiarimenti sull'astrazione

    salve,
    sto studiando java e avrei bisogno di chiarimenti, sinceramente non so nemmeno se quello che sto per chiedere si possa fare.

    io ho una classe astratta

    codice:
    public abstract class A{
    
    protected String stringa;
     
    // relativi set e get
    
    }
    poi ho due classi concrete che estendono la classe astratta

    codice:
    public class B extend A{
    
    private String stringaB;
     
    // relativi set e get
    
    }
    
    public class B extend C{
    
    private String stringaC;
     
    // relativi set e get
    
    }

    come posso fare se io volessi fare una classe che ha un metodo che puo ricevere sia B che C ed elaborare le stringhe specifiche di B oppure C

    io avevo pensato cosi

    codice:
    public String ritornaString(A stringa){
    
    // elabora la stringa
    }
    il problema è che facendo cosi io posso usare solo i metodi e le proprieta che sono nella classe A, quelli specifici per la classe B e C non li posso usare.

    come bisogna fare per avere una astrazione cosi alta ?


    grazie

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,254
    Quote Originariamente inviata da processore Visualizza il messaggio
    il problema è che facendo cosi io posso usare solo i metodi e le proprieta che sono nella classe A, quelli specifici per la classe B e C non li posso usare.
    (Nota: forse volevi scrivere public class C extend A )

    Tecnicamente nel ritornaString è possibile testare il tipo dell'oggetto con l'operatore instanceof e poi fare un "downcast" per poter "vedere" il tipo più specifico ed usare quindi ciò che il tipo più specifico ha aggiunto rispetto alla super-classe.

    Ma il punto/questione è un altro: PERCHE' devi fare una cosa del genere. Perché B deve avere un nuovo campo stringaB? E perché C deve avere un nuovo campo stringaC?

    Qui chiaramente stai mostrando un esempio poco significativo e abbozzato. Se c'è una esigenza davvero particolare, spiegala bene, altrimenti tutto questo tipicamente vuol dire che la gerarchia è "disegnata" male e andando contro il polimorfismo.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    Java Versions Cheat Sheet

  3. #3
    Utente di HTML.it
    Registrato dal
    Sep 2006
    Messaggi
    171
    per esempio se io ho una classe animale.

    codice:
    public class Cane extend Animale{
    
    public void cammina(){
    
    //fa qualcosa
    
    }
    
    }
    codice:
    public class uccello extend Animale{
    
    public void vola(){
    
    //fa qualcosa
    
    }
    
    }
    se io in un metodo ricevo un animale e a seconda del tipo di animale voglio usare il metodo cammina o vola come posso fare ?

    seguendo il tuo suggerimento mi sono andato a leggere come funziona il downcast, quindi usando il downcast posso usare i metodi e le proprieta specifiche per la classe in oggetto

    grazie mi chiarisci sempre le idee
    Ultima modifica di processore; 09-05-2017 a 17:24

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.