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