Confusione sull'istanza in un'interfaccia

0

Sto cercando di imparare il framework OGSi (distribuzione Equinox).

Ho registrato il mio servizio, ma sono confuso su un pezzo di codice che ho copiato:

IAgendaService service = new AgendaService();

Che cosa significa questa riga di codice?

Penso che nell'oggetto servizio ci siano i metodi IAgendaService che ho implementato in AgendaService , ma non ne sono sicuro.

Potrebbe essere una sorta di upcating? (So che non può essere perché non c'è eredità, ma cerco di trovare qualcosa di simile da confrontare)

    
posta Tinwor 17.07.2014 - 16:26
fonte

1 risposta

4

AgendaService è una classe che implementa l'interfaccia IAgendaService. Quella linea è l'equivalente di quanto segue:

IAgendaService service;
AgendaService agendaService = new AgendaService();
service = agendaService;

La variabile di servizio può fare riferimento a qualsiasi oggetto che implementa IAgendaService. Nell'esempio sopra, il servizio fa riferimento a un'istanza della classe AgendaService.

AgendaSevice implementa IAgendaService, quindi deve contenere tutti i metodi nell'interfaccia IAgendaService. È possibile chiamare qualsiasi metodo nell'interfaccia IAgendaService utilizzando l'oggetto servizio. Se si tenta di chiamare un metodo di AgendaService, si verificherà un errore di compilazione.

Per aiutare a chiarire qui è un esempio. L'elaborazione nella classe principale risulterà nello stesso output.

public interface IAgendaService {
    public void method1();
    public void method2();
}

public class AgendaService implements IAgendaService {
    private String instanceName;

    public AgendaService(String instanceName) {
        this.instanceName = instanceName;
    }

    public void method1() {
        System.out.println(instanceName + " - method1");
    }

    public void method2() {
        System.out.println(instanceName + " - method2");
    }

    public void method3() {
        System.out.println(instanceName + " - method3");
    }
}

public class Main {
    public static void main(String[] args) {
       AgendaService agendaService = new AgendaService("1");
       agendaService.method1(); // prints 1 - method1
       agendaService.method2(); // prints 1 - method2
       agendaService.method3(); // prints 1 - method3

       IAgendaService iAgendaService = agendaService;
       iAgendaService.method1(); // prints 1 - method1
       iAgendaService.method2(); // prints 1 - method2
       iAgendaService.method3(); // compile error because IAgendaService doesn't have a method3
    }
}
    
risposta data 17.07.2014 - 17:54
fonte

Leggi altre domande sui tag