martedì 9 aprile 2013

interfaccia


Un’interfaccia è un’evoluzione del concetto di classe astratta. Per definizione,
un’interfaccia possiede tutti i metodi dichiarati public e abstract e tutte le variabili
dichiarate public, static e final.
public interface interfaccia {
     public static final int a = 0;
     public abstract void metodo ();
}

Una classe può solo implementare un’interfaccia.
Una interfaccia può estendere un’altra interfaccia.

public class SottoClasse implements interfaccia{
L’implementazione di un’interfaccia da parte di una classe consiste nell’ereditare tutti i metodi e fornire loro un blocco di codice.
public class SottoClasse implements interfaccia{
     @Override
     public void metodo() {    
     }
}
public interface interfaccia2 extends interfaccia{
}
L’implementazione differisce dall’ estensione perché si possono implementare infinite interfacce mentre si può estendere solo una classe o un’interfaccia e quindi si simula l’ereditarietà multipla.
Se una interfaccia è stata implementata può essere istanziata:
 interfaccia a = new SottoClasse();

Una interfaccia che non sia stata implementata non si può instanziare a meno che sia estesa da un’altra interfaccia a sua volta implementata:
public class SottoClasse implements interfaccia2{
     @Override
     public void metodo() {    
     }
}
public interface interfaccia {}
public interface interfaccia2 extends interfaccia{}
public class Principale {
     public static void main(String[] args) {
         interfaccia2 b = new SottoClasse();              
         interfaccia a = b;
     }
}

Se una classe implementa una sottoInterfaccia allora si può istanziare anche la sopraInterfaccia:
public interface SuperInterfaccia {}
public interface SottoInterfaccia extends SuperInterfaccia{}
public class SottoClasse implements SottoInterfaccia{}
         SuperInterfaccia a = new SottoClasse(); //OK     
         SottoInterfaccia b = new SottoClasse(); //OK

Se una classe implementa una sopraInterfaccia allora non si può istanziare la sottoInterfaccia:
         public class SottoClasse implements SuperInterfaccia{}
         SuperInterfaccia a = new SottoClasse(); //OK     
         SottoInterfaccia b = new SottoClasse(); //KO              
         SuperInterfaccia c = new SuperClasse(); //KO     
         SottoInterfaccia d = new SuperClasse(); //KO

Se una sottoclasse estende una super classe ed implementa un’interfaccia, l’interfaccia non può essere istanziata con la superclasse:
public class SottoClasse extends SuperClasse implements SottoInterfaccia{}
         SuperInterfaccia a = new SottoClasse(); //OK     
         SottoInterfaccia b = new SottoClasse(); //OK              
         SuperInterfaccia c = new SuperClasse(); //KO     
         SottoInterfaccia d = new SuperClasse(); //KO

Se una sottoclasse estende una super classe e la super classe implementa una sotto interfaccia, le interfacce possono essere istanziata con la superclasse e con la sottoclasse:
         SuperInterfaccia a = new SottoClasse(); //OK     
         SottoInterfaccia b = new SottoClasse(); //OK              
         SuperInterfaccia c = new SuperClasse(); //OK     
         SottoInterfaccia d = new SuperClasse(); //OK
Se una sottoclasse estende una super classe e la super classe implementa una sopra interfaccia, la sotto interfaccia non può essere istanziata:
         SuperInterfaccia a = new SottoClasse(); //OK     
         SottoInterfaccia b = new SottoClasse(); //KO              
         SuperInterfaccia c = new SuperClasse(); //OK     
         SottoInterfaccia d = new SuperClasse(); //KO

Nessun commento:

Posta un commento