¿Qué significa clase reutilizable en Java?
Primero, la sintaxis utilizada en la síntesis.
La sintaxis de la síntesis es muy simple. Simplemente coloque la referencia del objeto de la clase que se va a reutilizar en la nueva clase. Por supuesto, esto por sí solo no es suficiente. Necesitamos crear un objeto de esta clase para que la referencia pueda apuntar a él. Debido a que Java no creará automáticamente un objeto predeterminado para nosotros, solo inicializará automáticamente la referencia en el campo como nula para nosotros. Puedes asignar un valor a una referencia en tres lugares, uno al definir la referencia, otro en el constructor y un tercero antes de usar el objeto. Para evitar olvidarnos de asignar un valor a la referencia antes de usarla, generalmente debemos crear el objeto en los dos primeros casos. Si el objeto que queremos crear costará mucho dinero y no necesariamente tiene que crearse cada vez, entonces podemos considerar una tercera forma de crear el objeto.
En segundo lugar, la sintaxis utilizada por la herencia
La herencia es una parte importante de Java, porque Java usa un único sistema raíz (este no es el caso de C++, porque debe ser compatible). con C), por lo que cada clase definida hereda de la clase de objeto raíz en Java. Al definir una clase que hereda de su propia clase, utilice la palabra clave extends seguida del nombre de la clase base, lo que significa que la clase recién definida hereda de esa clase base. Java no permite la herencia múltiple (C++ sí), lo que significa que una clase no puede tener múltiples clases base. Esta deficiencia puede compensarse mediante interfaces, ya que Java permite que una clase implemente cualquier número de interfaces.
Una subclase obtendrá automáticamente todos los campos y métodos de la clase base (también se obtendrán aquellos miembros controlados por el controlador de acceso e invisibles para la subclase, pero de nada sirve si no son visibles). es la Reutilización de código en clases base. Además del código obtenido automáticamente de la clase base, también se pueden definir nuevos miembros en la subclase y también se pueden sobrescribir métodos en la clase base (la llamada sobrescritura significa que la parte de declaración del método es la misma pero la implementación es diferente), por lo que los métodos con la misma firma pueden tener diferentes formas.
Debido a que las subclases poseen automáticamente miembros de la clase base, es natural llamar a métodos de la clase base en las subclases. Si este método se anula en una subclase, ¿sabe el compilador a qué método llamó? Java proporciona una palabra clave super para referirse a la clase base de una clase. Podemos usar esta palabra clave para indicar explícitamente que queremos usar miembros de la clase base. Si no escribe super, el compilador lo entenderá como una llamada anidada.
Aquí va una digresión. En los programas Java, el método main() de la clase pública se utiliza a menudo como punto de entrada de todo el programa. Un método main() tan estático no necesariamente tiene que aparecer en una clase pública. El método estático main() puede ser el punto de entrada de todas las clases (pero sólo puede ser main(), no cualquier método estático con otros nombres). Por ejemplo, un programa consta de varias clases. Cuando queremos realizar una prueba unitaria de una de las clases, podemos agregar main() a este archivo de clase y generarlo. Compile el archivo de clase de esta clase y ejecútelo en la consola a través de Java.
Después de que una subclase hereda una clase base, tiene miembros en la clase base, por lo que puede acceder a miembros visibles en la clase base a través del objeto de subclase creado. ¿Cómo hace esto Java? Cuando creamos un objeto de subclase, el objeto creado aquí no es un objeto de clase, sino un objeto de la clase base de esta clase, que se incluye en el objeto de subclase después de la creación. Es decir, el objeto de subclase creado tiene todos los miembros de su clase base (de lo cual podemos saber por qué se puede cargar), pero el objeto de subclase solo puede acceder a los miembros que puede ver en la clase base. Entonces, al crear un objeto de este tipo, ¿cuál es el orden en que se crean los objetos de subclase y clase base? Para inicializar la clase base correctamente, generalmente se llama al constructor de la clase base para la inicialización. En Java, al llamar al constructor de una subclase, se llamará automáticamente primero al constructor de la clase base. Este proceso se pasa capa por capa.
Por ejemplo, C hereda B y B hereda A. Al crear un objeto de C, el constructor de C primero llamará al constructor de B, y luego el constructor de B llamará primero al constructor de A. (Si no hay un constructor predeterminado en la clase base, se informará un error durante la compilación). Pero lo que se llama automáticamente aquí es el constructor predeterminado de la clase base (sin parámetros). ¿Qué debo hacer si quiero llamar al constructor de una clase base con parámetros? Como se mencionó anteriormente, las referencias a la clase base se pueden reemplazar por super. Al igual que llamar a otros constructores de esta clase a través de esto en el constructor, podemos llamar al constructor de la clase base con parámetros a través de super, como "super (i, j)". Al igual que llamar a otros constructores de esta clase, las llamadas explícitas al constructor de la clase base deben colocarse antes del constructor de la subclase, sin nada delante. Si el constructor de la clase base arroja una excepción y es necesario detectarla, será más problemático.