Creo que la mayoría de las personas están más familiarizadas con las dos cosas de "herencia" y "combinación" en Java. Este artículo discutirá principalmente estos dos temas. Si escribo algo mal, o es infantil y el argumento no está claro, todos pueden dejar un mensaje para corregirme.
Supongamos que hay 2 clases: A y B :
extends B, entonces decimos que A hereda B, A es una subclase y B es una clase principal, y este caso es heredancia.Piense en qué circunstancias generalmente consideramos estas dos cosas. Lo pensé brevemente y a menudo hay los siguientes escenarios:
interface abstract class Después de pensarlo, parece que en realidad solo hay estas dos situaciones, pero estas dos situaciones tienen una relación especial. Por ejemplo, el código público en realidad se puede lograr mediante la clase e interface abstract class (el método predeterminado en Java 8).
Bueno, después de decir tantas tonterías, simplemente lanzaré mi punto de vista. Bienvenido a:
interface abstract class Un ejemplo más común: en proyectos reales, a menudo definimos POJO o model , y estos modelos a menudo tienen algunos atributos con el mismo sustantivo y tipo, como:
// db table primary keyprivate int id; Es muy común, pero he conocido a muchos colegas en mi trabajo real. El sistema define una clase con el nombre BaseModel o RootModel , coloca la id de atributo anterior en él y luego todos los modelos en todo el proyecto heredan esta clase BaseModdel. Me pregunto si alguna vez has conocido a esos colegas. ¿Cuáles son los beneficios y desventajas de la escritura como esta?
Hablemos primero sobre los beneficios. Si tiene que decir qué beneficios puede traer, no ve ningún beneficio sustancial, excepto para escribir el teclado varias veces y perder estos atributos en la subclase. Sin embargo, ha causado cosas muy problemáticas para el mantenimiento posterior del proyecto.
Entonces hablemos sobre los posibles problemas de este escrito:
Un día, por algunas razones, desea encontrar dónde usar la
idde atributo en la subclase A (heredar el BaseModel) en el proyecto
Usted es inteligente y utilizado hábilmente find usages en el IDE, y luego encontrará que ha encontrado muchas ubicaciones de uso, y muchos de ellos no son lo que le importa en absoluto. Pero no hay forma, también ha buscado la ubicación de uso de la ID de propiedad de otras clases que heredan BaseModel. Si el proyecto no es grande, es posible que tenga menos propiedades. ¿Qué pasa si el proyecto es un poco más grande? Cuando tienes más de 50 competencia en búsqueda, ¿qué hará a continuación?
¿Cómo evitar esta situación? Es decir, no use BaseModel como este para usar la herencia de atributos. Por supuesto, en aras del período riguroso, todavía necesito explicar este significado en detalle. No me opongo completamente a la herencia de atributos. Aclaremos:
Lo que me opongo es que todos los modelos de todo el proyecto heredan un basemodelo y luego ponen las propiedades comunes en la base de base
Esta idea es tener en cuenta que es para todo el proyecto.
Personalmente, a menudo encuentro ejemplos de los libros de texto negativos anteriores, así que hablaré de ellos por separado. No estoy seguro de si esto ha sucedido en sus proyectos. De todos modos, mis colegas me han engañado muchas veces.
En cuanto a otros errores comunes relacionados con la "combinación" y la "herencia", todavía no lo he pensado (al menos creo que nadie lo logrará). Si creo que claramente en el futuro, o si los lectores tienen otras sugerencias, espero que pueda dejar un mensaje para comunicarse.