2015-12-27 5 views
6

Sono un principiante di programmazione Java e orientata agli oggetti e ho qualche difficoltà con i concetti. Per i compiti a casa, ho bisogno di scrivere due classi diverse che hanno la stessa esatta API ma sono implementate in modo diverso. Che cosa significa e come funziona?Che cosa significa per due classi avere la stessa API ma implementazioni diverse?

+3

È come avere una macchina, può essere un'auto sportiva o una familiare. Dovrebbero avere gli stessi metodi (accelerare, fermare, iniziare, ...) ma il loro comportamento è diverso. Quindi, hanno gli stessi metodi, solo un'implementazione diversa – Stultuske

risposta

1

La stessa API indica che le due classi contengono esattamente lo stesso elenco di metodi pubblici (ciascuno con lo stesso nome di metodo e i parametri del metodo dell'altra classe). L'implementazione di questi metodi può essere diversa in ogni classe. Inoltre, ogni classe può anche avere metodi privati ​​che non compaiono nell'altra classe, poiché i metodi privati ​​non fanno parte dell'API che una classe fornisce ai suoi utenti.

Un'API viene in genere definita in Java da un'interfaccia, quindi due classi che hanno la stessa API solitamente implementano la stessa interfaccia.

+0

Stai dimenticando i metodi 'protetti' IINM. –

+0

@TT. Ho provato a dare una risposta semplice. I metodi 'protected' possono essere considerati parte dell'API per gli utenti che estendono le classi, ma non fanno parte dell'API per gli utenti che creano solo istanze delle classi e non le estendono. – Eran

+0

Li considero sempre parte dell'interfaccia di programmazione. Nulla in ['API'] (https://en.wikipedia.org/wiki/Application_programming_interface) fa menzione di pubblico. Di solito, quando si considera un'interfaccia per il mondo esterno, viene detta un'API, come il costrutto 'interface' che è strettamente pubblico. –

3

Ti mostrerò. Questo è un esempio che due classi hanno la stessa API.

interface ISpeak { 
    void sayHi(); 
} 

class Teacher implements ISpeak{ 
    @Override 
    public void sayHi() { 
     System.out.println("Hi!I am a Teacher!"); 
    } 
} 

class Student implements ISpeak{ 
    @Override 
    public void sayHi() { 
     System.out.println("Hi!I am a Student!"); 
    } 
} 
+1

Questo in realtà non risponde alla domanda "Che cosa significa", solo "Come si implementa questo" – Stultuske

+2

@Stultuske Lo illustra con un breve esempio IMO. –

+0

Parlare è economico, mostrami il codice. :) – xylsh

0

All'interno Java e più ampio contesto della programmazione orientata agli oggetti moderno significa due class es dovrebbero implementare lo stesso interface, in modo efficace che consente ai clienti di queste classi per dipendono l'astrazione fornita da tale interfaccia, invece dei dettagli di implementazione di quelli di cemento classi.

+0

Puoi spiegare senza usare il computer? Spiega come faresti a qualcuno che non sa davvero nulla, in un modo molto semplice. Grazie. – user1454994

1

avete chiesto un linguaggio semplice invece di "parlare di computer:"

Un'interfaccia è come un contratto. Il contratto può dire che abbiamo a

  1. Dimmi il tuo nome (getName())
  2. Dimmi che rango (Getränk())
  3. Dimmi il tuo numero (ControllaNumero())

Il contratto ha un nome (spesso terminante in "abile" - osservabile, ecc.) Diciamo Identificabile. Se dichiariamo di attuare il contratto, dobbiamo soddisfare tutti i suoi requisiti.

Si potrebbe essere un essere umano e io potrei essere un robot - classi diverse con altre caratteristiche e comportamenti diversi.

class Human extends Object implements Identifiable 
class Robot extends Object implements Identifiable 

Il programma può considerarci come oggetti molto diversi. Può dire al robot di andare e attraccare da solo e caricare. Può dire all'umano di fare qualcosa che solo gli umani possono fare. Ma può chiedere a uno di loro di identificarsi.