Visualizzazione dei risultati da 1 a 7 su 7
  1. #1
    Utente di HTML.it
    Registrato dal
    Feb 2009
    Messaggi
    35

    Utilizzare una Interfaccia in un file .java separato.

    Ciao a tutti.
    Ho provato a definire una interfaccia ed una classe (con il metodo main) che la usa, all'interno dello stesso file. Compilando il .java ed eseguendo, nessun problema. Ho visto però in rete la possibilità di dividere il mio file .java in due file .java dove uno contiene la classe che usa l'interfaccia ed uno .java che contiene la definizione dell'interfaccia. Come posso unire ed eseguire come prima? Mi sono chiesto se devo mettere il .java dell'interfaccia in un package e quindi creare il package .jar. Mi chiedo se è la soluzione o come fare?
    Grazie.
    Ciao.

    Giovanni

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

    Re: Utilizzare una Interfaccia in un file .java separato.

    Originariamente inviato da gio123bg
    Come posso unire ed eseguire come prima?
    Compili i 2 sorgenti ed ottieni 2 file .class .... esattamente come avresti avuto prima con 1 solo sorgente che conteneva 2 classi!!!!

    Originariamente inviato da gio123bg
    Mi sono chiesto se devo mettere il .java dell'interfaccia in un package e quindi creare il package .jar. Mi chiedo se è la soluzione o come fare?
    I nomi di "package" e l'impacchettamento in file .jar sono un'altra cosa.
    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
    Feb 2009
    Messaggi
    35
    Grazie 1000 per la risposta tempestiva.
    Ho per esempio questo caso.
    Un file che contiene
    interface Material {
    String bronze = "bronze";
    String gold = "gold";
    String marble = "marble";
    String silver = "silver";
    String wood = "wood";
    }
    abstract class MaterialObject {
    String material;
    }
    class Ball extends MaterialObject {
    Ball(String material) {
    this.material = material;
    }
    }
    class Coin extends MaterialObject {
    Coin(String material) {
    this.material = material;
    }
    }

    ed un secondo file che contiene
    class Ring extends MaterialObject {
    Ring(String material) {
    this.material = material;
    }
    }
    class MaterialObjects {
    public static void main(String args[]) {
    Ball ball = new Ball(Material.wood);
    Coin coin = new Coin(Material.silver);
    Ring ring = new Ring(Material.gold);
    System.out.println(ball.material);
    System.out.println(coin.material);
    System.out.println(ring.material);
    }
    }

    Dal sito dove ho peso l'esempio, il risultato dovrebbe essere
    Result :
    wood
    silver
    gold

    Se provo solo a compilare il secondo file con nome Ring.java ho il seguente messaggio di errore.
    cannot resolve symbol class MaterialObject ecc....

    Come potrei quindi avere il tutto funzionante?
    Grazie.
    Ciao.

    Giovanni

  4. #4
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da gio123bg
    Se provo solo a compilare il secondo file con nome Ring.java ho il seguente messaggio di errore.
    cannot resolve symbol class MaterialObject ecc....
    Compila prima l'altro ... no?
    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
    Feb 2009
    Messaggi
    35
    Perfetto!
    Grazie 1000!

    Un'ultima curiosità ... ho notato che se nomino il primo file con il nome dell'interfaccia (Material.java) o con il nome della classe MaterialObject.java, sembra ininfluente. C'è forse un perchè? Mi scuso nuovamente per la mia ignoranza da principiante.

  6. #6
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da gio123bg
    ho notato che se nomino il primo file con il nome dell'interfaccia (Material.java) o con il nome della classe MaterialObject.java, sembra ininfluente.
    La regola è questa: un file sorgente .java può contenere più definizioni di classi (vale anche per interfacce/enum) ma solo una al massimo può essere marcata 'public'. E se esiste tale classe 'public', il nome del file sorgente deve tassativamente avere lo stesso identico nome della classe (a parte l'estensione .java). Se non c'è una classe public, non esiste alcuna restrizione sul nome del file.
    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
    Feb 2009
    Messaggi
    35
    Perfetto!
    Grazie 1000 per la chiarissima spiegazione.

    Ciao.

    Giovanni

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.