import java.util.*; interface PuedeCurar { void curar(); } interface PuedeConsultar { void consultar(); } interface PuedeRecetar{ void recetar(); } class Cirujano { public void operar() { System.out.println("Cirujano.operar()"); } } class Medico extends Cirujano implements PuedeCurar, PuedeConsultar, PuedeRecetar { public void curar() { System.out.println("Medico.curar()"); } public void consultar() { System.out.println("Medico.consultar()"); } public void recetar() { System.out.println("Medico.recetar()"); } } class Cardiologo { static void r(PuedeCurar x) { x.curar(); } static void s(PuedeConsultar x) { x.consultar(); } static void t(PuedeRecetar x) { x.recetar(); } static void u(Cirujano x) { x.operar(); } public static void main(String[] args) { Medico m = new Medico(); r(m); s(m); t(m); u(m); } } |
En este archivo fuente son definidas tres Interfases y tres Clases las cuales son descritas a continuación:
Cada una de estas interfases define un método el cual deberá ser implementado en las respectivas Clases que hagan uso de las interfases.
Esta Clase simplemente define un método llamado operar
que imprime un mensaje a pantalla.
Contiene la mayor parte de código funcional de este archivo fuente:
Es definida al igual que cualquier otra Clase con el vocablo class
.
Se utiliza el vocablo extends
para heredar ("Inherit") el comportamiento de la Clase Cirujano
.
Seguido se implementan las interfases PuedeCurar,PuedeConsultar,PuedeRecetar
a través de implements
, esto obliga a que sean definidos los métodos de las diversas interfases.
Son escritas las diversas implementaciones de los métodos de cada interfase, los cuales envían un mensaje a pantalla.
Dentro del método principal (main
) de esta Clase se genera una instancia de la Clase Medico
.
A través de dicha referencia son invocados los diversos métodos locales r,s,t,u
.
El método r
manda llamar la función curar
, nótese que aunque el dato de entrada aparece como PuedeCurar
(Interfase) la invocación se lleva acabo directamente de la Clase Medico
.
El método s
manda llamar la función consultar
, nótese que aunque el dato de entrada aparece como PuedeConsultar
(Interfase) la invocación se lleva acabo directamente de la Clase Medico
.
El método t
manda llamar la función recetar
, nótese que aunque el dato de entrada aparece como PuedeRecetar
(Interfase) la invocación se lleva acabo directamente de la Clase Medico
.
El método u
invoca la función operar
disponible en la Clase Cirujano
.