2013-05-31 16 views
6

Ho un'interfaccia denominata abcprogramma sta compilando anche senza che implementa l'interfaccia

public interface abc 
{ 
    void start(); 
} 

e ho una classe astratta denominata def

public abstract class def extends Thread implements abc 
{ 
} 

ho creato un'altra classe che estende def chiamato ghj

public class ghj extends def 
{ 
    //it is defing all the methods of its above abstract class 
    //now it does not implement the method define in interface start(); 
} 

Si prega di avvisare se la classe ghj non implementa l'interfaccia abc metodi richiesti quindi come può essere compilato il programma?

risposta

14

Anche se non sta definendo direttamente start(), estendendo Thread, un'implementazione di start() è essendo previsti per def e le sue sottoclassi, quindi all'esecuzione del contratto dell'interfaccia abc.

+1

+1 Dato che entrambe le definizioni sono le stesse :) –

+0

sì e cosa succede se cambiamo il tipo di ritorno di start ma estendiamo il thread sarà l'errore di compilazione tempo – anshulkatta

+1

@anshulkatta Se cambi il tipo di ritorno di 'start()' in l'interfaccia, il codice non verrà compilato a causa di tipi di reso incompatibili tra il contratto del metodo (fornito dall'interfaccia) e il metodo fornito (definito in Thread). – Vulcan

2

La classe completa sta già ereditando il metodo start() dalla classe Thread che sta avendo esattamente la stessa firma. Ecco perché il compilatore non sta generando alcun errore.

+0

hellooww !! è start() -_- – anshulkatta

+0

@anshulkatta sì ... ha modificato la mia risposta –

Problemi correlati