Ejemplo de clase abstracta
Según el diccionario, la abstracción es la cualidad de tratar con ideas en lugar de eventos. Por ejemplo, si consideramos el caso del correo electrónico, los detalles complejos como lo que ocurre en el momento de enviar un correo electrónico, el protocolo que utiliza el servidor de correo electrónico están ocultos para el usuario. Por tanto, para enviar un correo electrónico basta con escribir el contenido, mencionar la dirección del destinatario y hacer clic en enviar.
Del mismo modo, en la programación orientada a objetos, la abstracción es un proceso que consiste en ocultar al usuario los detalles de la implementación; sólo se le proporcionará la funcionalidad. En otras palabras, el usuario tendrá la información sobre lo que hace el objeto en lugar de cómo lo hace.
Aquí, usted no puede instanciar la clase Empleado, pero puede instanciar la clase Salario, y usando esta instancia usted puede acceder a los tres campos y siete métodos de la clase Empleado como se muestra a continuación.
Si quieres que una clase contenga un método particular pero quieres que la implementación real de ese método sea determinada por las clases hijas, puedes declarar el método en la clase padre como abstracto.
Ejemplo de sobrecarga en Java
El tutorial anterior cubrió los fundamentos del manejo de la selección a nivel de componente en NetBeans-cómo proporcionar objetos desde un ` Lookup de TopComponent`, y cómo escribir otros componentes que sean sensibles al Lookup de cualquier componente que tenga el foco.
Este tutorial se centra en la API de Nodos, que permite realizar vistas y selecciones más granulares que la selección a nivel de componente. Por supuesto, puedes escribir un componente que lea y escriba en su propio Lookup lo que quiera, y proporcionar así una lógica de selección más granular. Pero la API de Nodos hace que sea muy fácil hacer esto, y ofrece una serie de ventajas sobre hacerlo tú mismo.
La primera ventaja es que la API de Nodos proporciona una capa de presentación, una capa entre el modelo de datos que se está editando de alguna manera, y los componentes de la interfaz de usuario que exponen el modelo de datos al usuario. Esto es bastante útil y poderoso, ya que el mismo modelo puede ser presentado de múltiples maneras, o con múltiples UIs.
Esto no quiere decir que el contenido del tutorial anterior sea inútil, al contrario, es la razón por la que la API Nodes puede funcionar. La razón: org.openide.nodes.Node tiene un método, lo has adivinado, getLookup(). De hecho, lo que ocurre cuando cambias la selección en la pestaña Proyectos en el IDE, por ejemplo, es… la pestaña Proyectos es un TopComponent. Es un proxy del Lookup de cualquier objeto(s) actualmente seleccionado en el árbol-así como el Lookup de Utilities.actionsGlobalContext() es un proxy de cualquier componente enfocado y dispara los cambios cuando el foco cambia.
Ejemplo de interfaz Java
Las clases abstractas tienen su propia importancia en Java. Las clases abstractas funcionan según el principio de generalización. Se crean sólo para que alguna otra clase las extienda e implemente sus métodos abstractos. Estas clases no pueden ser instanciadas y no pueden tener objetos propios. Estas clases funcionan muy bien cuando se trata de Polimorfismo. Generalmente el concepto de Polimorfismo trata con una sola cosa que tiene más de una forma. Las clases abstractas suelen comportarse como más de una forma para sus subclases. Las clases abstractas pueden tener métodos propios, pero deben tener métodos abstractos para que las clases derivadas puedan implementarlos. Las clases deben ser anexadas con una palabra clave llamada como abstracta, para hacerla abstracta por naturaleza.
Clase abstracta de Java vs. interfaz
Las entidades admiten la herencia de clases, las asociaciones polimórficas y las consultas polimórficas. Las clases de entidad pueden extender las clases que no son de entidad, y las clases que no son de entidad pueden extender las clases de entidad. Las clases de entidad pueden ser tanto abstractas como concretas.
Las entidades pueden heredar de superclases que contienen estado persistente e información de mapeo pero no son entidades. Es decir, la superclase no está decorada con la anotación @Entity y no es mapeada como una entidad por el proveedor de Java Persistence. Estas superclases se utilizan con mayor frecuencia cuando se tiene información de estado y mapeo común a varias clases de entidad.
Las superclases mapeadas no pueden ser consultadas y no pueden ser utilizadas en las operaciones de EntityManager o Query. Usted debe usar subclases de entidad de la superclase mapeada en operaciones de EntityManager o Query. Las superclases mapeadas no pueden ser objetivos de las relaciones de entidad. Las superclases mapeadas pueden ser abstractas o concretas.
Las superclases mapeadas no tienen ninguna tabla correspondiente en el almacén de datos subyacente. Las entidades que heredan de la superclase mapeada definen los mapeos de las tablas. Por ejemplo, en el ejemplo de código anterior, las tablas subyacentes serían FULLTIMEEMPLOYEE y PARTTIMEEMPLOYEE, pero no existe la tabla EMPLOYEE.