Visualizzazione dei risultati da 1 a 6 su 6
  1. #1
    Utente di HTML.it
    Registrato dal
    Sep 2005
    Messaggi
    142

    riferimenti e costruttori esercizio

    Ciao a tutti, di solito mi trovo sempre bene con la community di questo forum, spero che possiate ancora uan volta aiutarmi.

    ho questo esercizio:

    class A{}
    class B extend A{}
    class C extend B{}

    class D {
    void m(A a) {System.out.print("A");}
    void m(B b) {System.out.print("B");}
    void m(C c) {System.out.print("C");}

    public static void main (String[] arg) {

    A c1 = new C();
    B c2 = new C();
    C c3 = new C();
    D d = new D();

    d.m(c1); d.m(c2); d.m(c3);

    }
    }

    cosa stampa?

    vorrei capire esattamente come ci si comporta x sapere a quale metodo riferirsi.

    e capire quando si dichiara A c1 = new C(); come devo ragionare.

    grazie a chi mi risponderà

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284

    Re: riferimenti e costruttori esercizio

    Originariamente inviato da atomico
    vorrei capire esattamente come ci si comporta x sapere a quale metodo riferirsi.
    Basta che ti ricordi sempre che tra più metodi in overload, il compilatore sceglie quello da invocare basandosi solamente sul tipo statico degli argomenti passati e scegliendo il metodo più "specifico".

    Visto che c3 è di tipo C (e non ha importanza a cosa fa riferimento) il compilatore "sa" che tutte tre le versioni di m() sarebbero tecnicamente invocabili. Ma solo uno è il più "specifico". Tra i tipi A B e C, quale è il più specifico?
    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
    Sep 2005
    Messaggi
    142
    bah non saprei.. forse C?

    grazie mille come al solito spiegazione perfetta

    altro esercizietto, capisco + come spieghi te che come spiega il mio prof.. pensa te.
    Codice PHP:
    class {
    static 
    String m (float i ) { return "float";}
    static 
    String m (double i) {return "double";}

    public static 
    void main (String[] args) {
    int a=1;
    long b=2;
    System.out.print(m(a) + "," m(b));
    }

    in questo caso sia a che b possono essere applicabili ad entrambi i metodi, quindi con quale criterio si sceglie l'uno o l'altro?

  4. #4
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da atomico
    bah non saprei.. forse C?
    Esatto.

    Originariamente inviato da atomico
    grazie mille come al solito spiegazione perfetta

    altro esercizietto, capisco + come spieghi te che come spiega il mio prof.. pensa te.
    Grazie (però da un lato c'è poco da essere felici ... allora)

    Originariamente inviato da atomico
    in questo caso sia a che b possono essere applicabili ad entrambi i metodi, quindi con quale criterio si sceglie l'uno o l'altro?
    Per i tipi primitivi è una cosa leggermente diversa. Il compilatore innanzitutto prende in considerazione solo i metodi che hanno il parametro con un tipo che è uguale o più grande rispetto all'argomento passato. Tra questi sceglie quello che ha il parametro con il tipo più piccolo.
    Per dirla in altro modo: quello che ha il tipo uguale o appena superiore all'argomento passato.
    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
    Sep 2005
    Messaggi
    142
    quindi float?

    ma l'ordine è:

    byte
    short
    int
    long
    float
    double?

    e il char dove si mette?

  6. #6
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da atomico
    quindi float?
    Esatto.

    Originariamente inviato da atomico
    ma l'ordine è:

    byte
    short
    int
    long
    float
    double?
    Sì.

    Originariamente inviato da atomico
    e il char dove si mette?
    char ha la stessa dimensione (16 bit) del short ma è unsigned. Come dimensione quindi sono allo stesso livello. Nessuno dei due è più "grande" dell'altro.

    Se vai a vedere le regole precise per il widening/narrowing di tipi primitivi, vedi meglio la questione. Un char non è convertibile implicitamente ad un short e nemmeno il contrario. Questo per via del range di valori dei due tipi (char è unsigned mentre short è signed).
    Puoi passare da uno all'altro solo tramite un narrowing che quindi deve essere esplicito.

    Poi un byte è convertibile implicitamente a char tramite una doppia conversione, prima di widening (a int) e poi di narrowing (a char).
    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.