Risultati da 1 a 22 di 22

Discussione: [java]Casting

  1. #1
    L'Onesto L'avatar di Howl
    Data Registrazione
    19-05-06
    Messaggi
    1,420

    Predefinito [java]Casting

    Ok, sono arrivato al punto di studiare cosè il casting, e maledico la confusione che porta prendendo per esempio una classe A e una classe B con dentro un metodo stringa:

    Codice:
    public class A { 
    public String f1() { return "uno"; }
    }
    Codice:
    public class B { 
    public String f2() { return "due"; }
    }
    se io nel main creo un oggetto di A col costruttore di B, poi come faccio a usare il metodo f2 ?
    Codice:
    A p = new B;
    String s =p.f2()  //ovvio errore 
    System.out.println (s);

  2. #2
    Il Puppies L'avatar di saltatempo
    Data Registrazione
    25-09-03
    Località
    Roma
    Messaggi
    592

    Predefinito Re: [java]Casting

    Citazione Originariamente Scritto da Howl Visualizza Messaggio
    Ok, sono arrivato al punto di studiare cosè il casting, e maledico la confusione che porta prendendo per esempio una classe A e una classe B con dentro un metodo stringa:

    Codice:
    public class A { 
    public String f1() { return "uno"; }
    }
    Codice:
    public class B { 
    public String f2() { return "due"; }
    }
    se io nel main creo un oggetto di A col costruttore di B, poi come faccio a usare il metodo f2 ?
    Codice:
    A p = new B;
    String s =p.f2()  //ovvio errore 
    System.out.println (s);


    A p = new B();
    non puoi creare un oggetto A col costruttore di B sono oggetti di due Tipi diversi.

    puoi farlo solo nel caso in cui B estende A, quindi fai un CAST implicito da B ad A;

    così funziona:

    public class B extends A{ metodi, variabili }

    in questo modo se:
    A p = new B();
    String s =p.f2(); (ma in questo caso il metodo f2(); non esiste, dovresti dichiararlo anche in A, e allora verrebbe sovrascritto e useresti quello di B)
    lo so è complicato ma l'ereditarietà funziona in questo modo:

    Se consideri un figlio (cioè una classe che estende un'altra) come il padre (e quindi fai un cast implicito da figlio a padre) perdi tutto ciò che il padre non ha, e mantieni quello che viene sovrascritto da B.



    va be' c'ho provato a spiegarlo... non so se t'è stato d'aiuto.

  3. #3
    L'Onesto L'avatar di Howl
    Data Registrazione
    19-05-06
    Messaggi
    1,420

    Predefinito Re: [java]Casting

    Si, ho scordato di scrivere che b estende a
    il fatto appunto che è devo richiamare un metodo proprio di B che A non ha. Quindi dovrei per forza dichiararlo anche in A ?

  4. #4
    ZioYuri78
    ospite

    Predefinito Re: [java]Casting

    Citazione Originariamente Scritto da Howl Visualizza Messaggio
    Si, ho scordato di scrivere che b estende a
    il fatto appunto che è devo richiamare un metodo proprio di B che A non ha. Quindi dovrei per forza dichiararlo anche in A ?
    A questo punto devi rivedere le tue classi, è evidente che quel metodo va in A e poi verrà ereditato da B

  5. #5
    L'Onesto L'avatar di Howl
    Data Registrazione
    19-05-06
    Messaggi
    1,420

    Predefinito Re: [java]Casting

    Citazione Originariamente Scritto da ZioYuri78 Visualizza Messaggio
    A questo punto devi rivedere le tue classi, è evidente che quel metodo va in A e poi verrà ereditato da B
    kk '-' è un esercizio che devo fare e devo spiegare se con una creazione oggetto in casting posso evocare metodi della classe figlia, ma è un po un casino e non avevo capito che non si può fare. Molte grazie

  6. #6
    Il Puppies L'avatar di MscG
    Data Registrazione
    15-09-01
    Località
    Monti abruzzesi
    Messaggi
    777

    Predefinito Re: [java]Casting

    In realtà puoi farlo, ma devi fare un downcast esplicito:

    Codice:
    ((B)p).f2();
    In questo modo stai dicendo al compilatore che p è in realtà un'istanza di B e quindi puoi richiamare il metodo f2 che hai definito solo in B.

    Quindi questo codice:

    Codice:
    A p = new B();
    String s = ((B)p).f2();
    System.out.println (s);
    funziona. Attenzione però che quest'altro codice:

    Codice:
    A p = new B();
    p = new A();
    String s = ((B)p).f2();
    System.out.println (s);
    compilerà senza problemi ma a runtime ti darà un ClassCastException poiché p punta ad un'istanza di A che non può, ovviamente, essere castata a B.

  7. #7
    L'Onesto L'avatar di Howl
    Data Registrazione
    19-05-06
    Messaggi
    1,420

    Predefinito Re: [java]Casting

    meglio ancora o/ grazie

  8. #8
    L'Onesto L'avatar di Howl
    Data Registrazione
    19-05-06
    Messaggi
    1,420

    Predefinito Re: [java]Casting

    Un' ultima cosa: Ipotizzando che la classe A estende la classe B e fa overriding di un metodo stampa(), in quale modo è possibile richiamare il metodo stampa() di B (quindi il metodo non sovrascritto) da un oggetto della classe A?

  9. #9
    Il Puppies L'avatar di MscG
    Data Registrazione
    15-09-01
    Località
    Monti abruzzesi
    Messaggi
    777

    Predefinito Re: [java]Casting

    Citazione Originariamente Scritto da Howl Visualizza Messaggio
    Un' ultima cosa: Ipotizzando che la classe A estende la classe B e fa overriding di un metodo stampa(), in quale modo è possibile richiamare il metodo stampa() di B (quindi il metodo non sovrascritto) da un oggetto della classe A?
    Questo non si può fare in quanto violerebbe il principio della separazione: supponi che stai usando una libreria e ad un certo punto chi l'ha scritta cambia architettura ed A non estende più B. Se fosse possibile fare quello che richiedi, questa modifica esterna al tuo codice romperebbe la tua applicazione.

    Al massimo dentro il metodo stampa() di A puoi chiamare super.stampa() per eseguire il codice della classe padre.

  10. #10
    ZioYuri78
    ospite

    Predefinito Re: [java]Casting

    Citazione Originariamente Scritto da Howl Visualizza Messaggio
    kk '-' è un esercizio che devo fare e devo spiegare se con una creazione oggetto in casting posso evocare metodi della classe figlia, ma è un po un casino e non avevo capito che non si può fare. Molte grazie
    Ah beh ma allora come dice MscG si può fare con downcast esplicito , non ci ho pensato perchè è una pratica da evitare (più che altro se si è costretti al downcast vuol dire che qualcosa non va nella progettazione), ma se è per un esercizio dove devi dimostrare se si può fare allora si

  11. #11
    L'Onesto L'avatar di Howl
    Data Registrazione
    19-05-06
    Messaggi
    1,420

    Predefinito Re: [java]Casting

    Riesumo il thread per parlare dei thread () dovrei fare un programmino dove viene creato un thread . Questo thread compie un ciclo infinito su un' operazione matematica, e deve essere interrotto dopo tot millisecondi (inseriti dall' utente).
    Non avendo ancora toccato la gestione del tempo però mi trovo alquanto spaesato sul come interromperlo. Come cavolo faccio? Uso la classe timer()? Non capisco bene come funzioni D:

  12. #12
    Il Puppies L'avatar di MscG
    Data Registrazione
    15-09-01
    Località
    Monti abruzzesi
    Messaggi
    777

    Predefinito Re: [java]Casting

    System.currentTimeMillis() ti restituisce il timestamp in millisecondi e puoi usarlo per calcolarti quanto tempo è trascorso dall'avvio del thread e quindi uscire dal ciclo quando è passato il tempo scelto dall'utente.

  13. #13
    L'Onesto L'avatar di Howl
    Data Registrazione
    19-05-06
    Messaggi
    1,420

    Predefinito Re: [java]Casting

    Accendo di nuovo il bat-segnale, stavolta per un problema abbastanza elementale ma che mi sta mettendo in crisi: chebotta: ho un arraylist<character> che contiene qualche lettera, e viene dato un ingresso al metodo una stringa.
    Similmente allo scarabeo, devo vedere se con le lettere contenute nella arraylist posso comporre la parola contenuta in string. Per esempio, se nella list ho B L O B A M, devo controllare se posso farci la parola bolla.
    Non riesco a trovare il modo per fare un confronto però. Mi serve qualcosa per controllare se dentro la stringa ci siano tutte le lettere contenute nella list

  14. #14
    Il Puppies L'avatar di MscG
    Data Registrazione
    15-09-01
    Località
    Monti abruzzesi
    Messaggi
    777

    Predefinito Re: [java]Casting

    Dato che mi sembra si tratti di un esercizio, non ti suggerirò l'intera risposta!
    Come suggerimento posso solo dirti di dare un'occhiata al Collections Framework, in particolare a

    Spoiler:

  15. #15
    L'Onesto L'avatar di Howl
    Data Registrazione
    19-05-06
    Messaggi
    1,420

    Predefinito Re: [java]Casting

    è esattamente un esercizio sul frame collection non ricordo se ho provato a usarlo sto metodo, rimedierò '-'

  16. #16
    Il Puppies L'avatar di MscG
    Data Registrazione
    15-09-01
    Località
    Monti abruzzesi
    Messaggi
    777

    Predefinito Re: [java]Casting

    Ora che ci ripenso meglio, forse più che dei Set dovresti usare delle List...
    comunque il containsAll c'è anche lì.

  17. #17
    L'Onesto L'avatar di Howl
    Data Registrazione
    19-05-06
    Messaggi
    1,420

    Predefinito Re: [java]Casting

    L' ho specificato infatti che è un arraylist, non un set
    ho dato un' occhiata a containsall, ma potresti spiegarmi un momento la sintassi ?
    public boolean containsAll(Collection<?> c) Returns true if this list contains all of the elements of the specified collection.
    Parameters:
    c - collection to be checked for containment in this list
    Returns:
    true if this list contains all of the elements of the specified collection


    restituisce true se la lista contiene tutti gli elementi, e fin qui' ok. Ma posso dargli in ingresso solo una collection ? Se è questo il caso non mi serve a molto dato che non devo confrontare una lista con un' altra lista, ma una lista e una stringa (o un' array di char)

  18. #18
    Il Puppies L'avatar di MscG
    Data Registrazione
    15-09-01
    Località
    Monti abruzzesi
    Messaggi
    777

    Predefinito Re: [java]Casting

    Si, in ingresso devi dargli una collection. Ok, tu hai tra le mani una stringa e ti serve una collection per poter usare questo metodo, quindi?
    (la soluzione sta tutta qua, non posso suggerirti tutto )

  19. #19
    L'Onesto L'avatar di Howl
    Data Registrazione
    19-05-06
    Messaggi
    1,420

    Predefinito Re: [java]Casting

    Citazione Originariamente Scritto da MscG Visualizza Messaggio
    Si, in ingresso devi dargli una collection. Ok, tu hai tra le mani una stringa e ti serve una collection per poter usare questo metodo, quindi?
    (la soluzione sta tutta qua, non posso suggerirti tutto )
    Troppo semplice, no !
    /
    /

    btw ho capito cosa intendi, anche se ora ho un altro problema con il carattere jolly, ma a quello ci penso da solo
    una cosa che non centra con l' esercizio in questione : come faccio con un ciclo foreach a stampare un array dall' ultimo indice al primo ?

  20. #20
    Il Puppies L'avatar di MscG
    Data Registrazione
    15-09-01
    Località
    Monti abruzzesi
    Messaggi
    777

    Predefinito Re: [java]Casting

    Citazione Originariamente Scritto da Howl Visualizza Messaggio
    come faccio con un ciclo foreach a stampare un array dall' ultimo indice al primo ?
    In maniera diretta non penso sia possibile dato che il foreach scorre una collection o un array nel suo verso "naturale". L'unica soluzione che mi viene in mente è invertire l'array e poi scorrere quest'ultima versione.
    Per fare questo, il collections framework ha due classi di utilità Arrays e Collections che ti possono tornare utili per la soluzione. Te la metto sotto spoiler, tu cerca di arrivarci da solo!

    Spoiler:

    Codice:
    Integer arr[] = new Integer[]{1,2,3};
    Collections.reverse(Arrays.asList(arr));
    for(Integer val : arr)
        System.out.println(val);
    }

  21. #21
    L'Onesto L'avatar di Howl
    Data Registrazione
    19-05-06
    Messaggi
    1,420

    Predefinito Re: [java]Casting

    torno alla carica con una semplice domanda:Java possiede o meno la capacità di individuare la tipologia di file con cui opera sulla base dell'estensione che il file stesso presenta ? Per esempio se io prendo un file pippo.txt, lui capisce da solo con l' estensione del file di aver a che fare con un file di testo ?
    Cmq di default che tipi di file può gestire java senza bisogno di librerie ?

  22. #22
    Lo Zio
    Data Registrazione
    23-06-08
    Località
    Valle d'Agno
    Messaggi
    2,222

    Predefinito Re: [java]Casting

    Citazione Originariamente Scritto da Howl Visualizza Messaggio
    torno alla carica con una semplice domanda:Java possiede o meno la capacità di individuare la tipologia di file con cui opera sulla base dell'estensione che il file stesso presenta ? Per esempio se io prendo un file pippo.txt, lui capisce da solo con l' estensione del file di aver a che fare con un file di testo ?
    Cmq di default che tipi di file può gestire java senza bisogno di librerie ?
    Per la prima domanda, la risposta è no. Il file su disco non contiene informazioni utili a tale scopo, quindi se ad esempio tu salvi un file di testo con estensione exe, per windows è un eseguibile, per linux potrebbe non esserlo, in quanto dipende dal magic code etc...
    Chiaramente puoi molto facilmente applicare il metodo di windows attraverso un switch case eseguendo un check dell'estensione.

    Per la seconda, java può leggere qualsiasi, o quasi, tipo di file con la giusta libreria, quelli di testo ed immagine son sicuro che può manipolarli di default per il resto bisogna andare a vedere caso per caso.

    Cosa avresti in mente di fare?

Permessi di Scrittura

  • Tu non puoi inviare nuove discussioni
  • Tu non puoi inviare risposte
  • Tu non puoi inviare allegati
  • Tu non puoi modificare i tuoi messaggi
  • Il codice BB è Attivato
  • Le faccine sono Attivato
  • Il codice [IMG] è Attivato
  • Il codice HTML è Disattivato