Java orientado a objetos: aquí organizamos el conocimiento básico de los objetos orientados a los objetos para ayudar a todos a aprender y comprender. Espero que pueda ayudar a todos. Aquí están el conocimiento relevante compilado basado en la información de la entrevista de la empresa:
La diferencia entre sobrecarga y anulación. ¿Puede el método sobrecargado cambiar el tipo de valor de retorno?
La sobrecarga significa sobrecarga, y anular significa sobrescribir, es decir, reescribir. La sobrecarga de sobrecarga significa que puede haber múltiples métodos con el mismo nombre en la misma clase, pero las listas de parámetros de estos métodos son diferentes (es decir, el número o tipo de parámetros son diferentes).
Reescribir la anulación significa que el método en la subclase puede ser exactamente el mismo que el nombre y los parámetros de un método en la clase principal. Cuando este método se llama a través del objeto de instancia creado por la subclase, se llamará al método de definición en la subclase, que es equivalente a sobrescribir exactamente el mismo método definido en la clase principal. Esta es también una manifestación del polimorfismo de la programación orientada a objetos.
La anulación se puede traducir como anulación. Como puede saber literalmente, está anulando un método y reescribirlo para lograr diferentes funciones. La anulación más familiar para nosotros es la implementación de métodos de interfaz. En una interfaz, el método generalmente se declara, y cuando lo implementamos, necesitamos implementar todos los métodos de declaración de interfaz. Además de este uso típico, también podemos anular los métodos en la clase principal en herencia. Los siguientes puntos deben recibir atención durante la cobertura:
1. El logotipo del método de superposición debe coincidir exactamente con el logotipo del método de superposición para lograr el efecto de la superposición;
2. El valor de retorno del método sobrescribido debe ser consistente con la devolución del método sobrescrito;
3. La excepción lanzada por el método sobrescrito debe ser consistente con la excepción lanzada por el método sobrescrito, o es una subclase;
4. El método sobrescribido no puede ser privado, de lo contrario, solo se define un nuevo método en su subclase y no se sobrescribe.
La sobrecarga se puede traducir como sobrecarga, lo que significa definir algunos métodos con el mismo nombre, distinguir estos métodos definiendo diferentes parámetros de entrada y, luego, cuando se le llame, la VM seleccionará el método apropiado para ejecutar de acuerdo con diferentes estilos de parámetros. Al usar la sobrecarga, preste atención a los siguientes puntos:
1. Al usar sobrecarga, solo puede pasar diferentes estilos de parámetros. Por ejemplo, los diferentes tipos de parámetros, el diferente número de parámetros y diferentes órdenes de parámetros (por supuesto, varios tipos de parámetros en el mismo método deben ser diferentes, por ejemplo, puede ser divertido (int, flotación), pero no puede ser divertido (int, int));
2. No se puede sobrecargar mediante permisos de acceso, tipos de devolución y excepciones lanzadas;
3. El tipo de excepción y el número de métodos no afectarán la sobrecarga;
4. Para la herencia, si un método tiene derechos de acceso en la clase principal y es priavte, entonces no se puede sobrecargar en la subclase. Si se define, solo define un nuevo método y no alcanzará el efecto de sobrecarga.
Si la lista de parámetros de varios métodos sobrecargados es diferente, sus tipos de retorno pueden ser diferentes. Si la lista de parámetros de los dos métodos es exactamente la misma, la sobrecarga de sobrecarga no puede lograrse mediante diferentes valores de retorno. Podemos usar el método de prueba inversa para ilustrar este problema. Por ejemplo, cuando llamamos al método map.remove (clave), aunque el método eliminar tiene un valor de retorno, generalmente no definimos la variable que recibe el resultado de retorno. En este momento, suponiendo que hay dos métodos en esta clase con exactamente el mismo nombre y lista de parámetros, solo porque el tipo de retorno es diferente, Java no puede determinar a qué método el programador quiere llamar, porque no se puede juzgar devolviendo el tipo de resultado.
¿Se puede anular el constructor?
El constructor del constructor no puede ser heredado, por lo que la anulación no se puede anular, pero la sobrecarga se puede sobrecargar.
¿Se puede heredar una interfaz? ¿Puede una clase abstracta implementar una interfaz? ¿Puede una clase abstracta heredar la clase concreta? ¿Puede existir una clase abstracta? ¿Puede una clase abstracta tener un método principal estático en una clase abstracta?
Las interfaces pueden heredar interfaces. Las clases abstractas pueden implementar (implementos) interfaces. Puede haber métodos principales estáticos en clases abstractas.
La única diferencia entre las clases abstractas y las clases ordinarias es que no pueden crear objetos de instancia y permitir métodos abstractos.
Al escribir el método Clone (), generalmente hay una línea de código. ¿Qué es?
El método Clone () es clon, lo que significa copiar el objeto; Es decir, ya hay objeto A, donde A contiene algunos valores válidos, pero si desea tener un objeto B, y cualquier cambio a B no afectará el valor en A, pero B no es un objeto nuevo que sea nuevo.
Copia: ① El objeto de copia devuelve un nuevo objeto, no una referencia. ② La diferencia entre copiar un objeto y el objeto devuelto con el nuevo operador es que la copia ya contiene la información del objeto original, en lugar de la información inicial del objeto.
Clone tiene un comportamiento predeterminado, super.clone (); Porque primero, los miembros de la clase matriz deben copiarse en su lugar, y luego se copian los miembros.
¿Cuáles son los aspectos de las características orientadas a objetos?
Los lenguajes de programación orientados a objetos incluyen cuatro características principales: encapsulación, herencia, abstracción y polimorfismo.
1 paquete:
El embalaje es la base para garantizar que los componentes del software tengan una excelente modularidad. El objetivo del empaque es lograr la "alta cohesión y el bajo acoplamiento" de los componentes de software para evitar los cambios causados por la interdependencia del programa. En los lenguajes de programación orientados a objetos, los objetos son la unidad más básica de encapsulación, y la encapsulación orientada a objetos es más clara y más poderosa que la encapsulación del lenguaje tradicional. La encapsulación orientada al objeto es encapsular el código que describe las propiedades y el comportamiento de un objeto en un "módulo", es decir, en una clase. Las propiedades se definen por variables y el comportamiento se define por los métodos. El método puede acceder directamente a las propiedades en el mismo objeto. En términos generales, solo recuerde poner la variable y el método para acceder a esta variable, definir todas las variables de miembros en una clase como privada, y solo los propios métodos de la clase pueden acceder a estas variables miembros, lo que básicamente implementa la encapsulación del objeto. Compre un principio: coloque los métodos y los métodos relacionados que funcionan con lo mismo en la misma clase, y coloque los métodos y los datos que funcionan en la misma clase.
2. Resumen:
La abstracción es descubrir las similitudes y puntos en común de algunas cosas, y luego clasificarlos en una clase que solo considera las similitudes y puntos en común de estas cosas, e ignora los aspectos que no están relacionados con el tema y el objetivo actuales, y se centran en aspectos relacionados con el objetivo actual. Por ejemplo, ver una hormiga y un elefante y puedes imaginar cómo son, eso es la abstracción. La abstracción incluye dos aspectos: abstracción conductual y abstracción del estado. Por ejemplo, defina una clase de persona de la siguiente manera:
Persona de clase {nombre de cadena; int Age; } Los humanos son originalmente cosas muy complejas y tienen muchos aspectos, pero debido a que el sistema actual solo necesita comprender el nombre y la edad de una persona, la clase definida anteriormente solo contiene los atributos de nombre y edad. Esta es una abstracción. El uso de la abstracción puede evitar considerar algunos detalles que no están relacionados con el objetivo.
3. Herencia:
Al definir e implementar una clase, se puede hacer en función de una clase existente, y el contenido definido por la clase existente se toma como su propio contenido, y se pueden agregar varios contenidos nuevos, o el método original se puede modificar para que sea más adecuado para necesidades especiales. Esto es herencia. La herencia es un mecanismo por el cual los subclases comparten automáticamente los datos y métodos de clase principal. Esta es una relación entre las clases, lo que mejora la reutilización y la escalabilidad del software.
4 polimorfismos:
El polimorfismo se refiere al tipo específico apuntado por la variable de referencia definida en el programa y las llamadas de método emitidas a través de la variable de referencia no se determinan durante la programación, pero se determinan durante la ejecución del programa, es decir, qué objeto de instancia de clase apuntará, y qué llamadas de método de clase emitidas por la variable de referencia se implementan en qué método solo se puede determinar durante la ejecución del programa. Debido a que la clase específica se determina solo cuando el programa se está ejecutando, las variables de referencia pueden estar vinculadas a varias implementaciones de clase diferentes sin modificar el código del programa fuente, lo que conduce al método específico del cambio de llamada de referencia en consecuencia. Es decir, el código específico unido al programa se ejecuta sin modificar el código del programa, para que el programa pueda seleccionar múltiples estados en ejecución, que es el polimorfismo. El polimorfismo mejora la flexibilidad y la escalabilidad del software. Por ejemplo, el UserDAO en el siguiente código es una interfaz que define el objeto de instancia apuntado por la variable de referencia UserDAO y es devuelta por Daofactory.getDao () cuando se ejecuta. A veces apunta a la implementación de UserJDBCDAO, y a veces apunta a la implementación de UserHibernatedAO. De esta manera, puede cambiar la implementación de clase específica que useDAO sin modificar el código fuente, lo que resulta en el código específico del método userdao.insertuser () también cambia en consecuencia. Es decir, a veces se llama el método Insertuser de UserJDBCDAO, y a veces se llama Método Insertuser de UserHibernatedAo:
Userdao userDao = daofactory.getdao (); userdao.insertuser (usuario);
¿Cuál es el mecanismo para implementar el polimorfismo en Java?
La variable de referencia definida por la clase o interfaz principal puede apuntar al objeto de instancia de la clase de implementación subclase o concreta, y el método llamado por el programa está vinculado dinámicamente durante el tiempo de ejecución. Es el método que se refiere al objeto de instancia específico que apunta por la variable, es decir, el método del objeto que se ejecuta en la memoria, en lugar del método definido en el tipo de variable de referencia.
¿Cuál es la diferencia entre la clase abstracta y la interfaz?
Una clase que contiene un modificador abstracto es una clase abstracta, un objeto de instancia que no puede ser creado por la clase abstracta. Las clases que contienen métodos abstractos deben definirse como clase abstracta, y los métodos en las clases de clase abstracta no tienen que ser abstractas. La definición de métodos abstractos en la clase de clase abstracta debe implementarse en la subclase concreta, por lo que no puede haber constructores abstractos o métodos estáticos abstractos. Si la subclase no implementa todos los métodos abstractos en la clase principal abstracta, la subclase también debe definirse como el tipo abstracto.
Se puede decir que una interfaz es un caso especial de una clase abstracta, y todos los métodos en una interfaz deben ser abstractos. La definición del método en la interfaz predeterminada al tipo de resumen público y el tipo de variable miembro en la interfaz predeterminada a la final estática pública.
La diferencia gramatical entre los dos:
1. Las clases abstractas pueden tener métodos de construcción, pero no en interfaces.
2. Puede haber variables de miembros ordinarios en clases abstractas, pero no hay variables de miembros ordinarios en la interfaz.
3. Las clases abstractas pueden contener métodos ordinarios no abstractos. Todos los métodos en la interfaz deben ser abstractos y no puede haber métodos ordinarios no abstractos.
4. Los tipos de acceso de los métodos abstractos en las clases abstractas pueden ser públicos, protegidos y (el tipo predeterminado, aunque no hay error en Eclipse, no debería funcionar), pero los métodos abstractos en la interfaz solo pueden ser de tipo público, y el valor predeterminado es el tipo público abstracto.
5. Las clases abstractas pueden contener métodos estáticos, pero las interfaces no pueden contener métodos estatales.
6. Tanto las clases abstractas como las interfaces pueden contener variables de miembros estáticos. El tipo de acceso de las variables de miembros estáticos en clases abstractas puede ser arbitraria, pero las variables definidas en la interfaz solo pueden ser el tipo final estático público, y el valor predeterminado es el tipo final estático público.
7. Una clase puede implementar múltiples interfaces, pero solo puede heredar una clase abstracta.
La diferencia entre los dos en la aplicación:
Las interfaces juegan un papel en los métodos de diseño de arquitectura del sistema, utilizados principalmente para definir los contratos de comunicación entre los módulos. Las clases abstractas juegan un papel en la implementación del código y pueden realizar la reutilización del código. Por ejemplo, el patrón de diseño del método de plantilla es una aplicación típica de clases abstractas. Suponiendo que todas las clases de servlet en un determinado proyecto deben usar el mismo método para hacer juicios de permiso, registros de registros de acceso y manejar excepciones, entonces puede definir una clase base abstracta, para que todos los servlets puedan heredar esta clase base abstracta, completar los juicios de permisos, registros de acceso de registro y manejar las excepciones en el método de servicio de la clase base abstracta, y solo completar sus códigos de logic comerciales respectivos en cada subclass en cada subclass. El pseudo-código es el siguiente:
Public Abstract Class BaseServlet extiende httpServlet {Servicio público de Void final (httpservletRequest, respuesta httpServletResponse) lanza ioexcetion, servletException {registro de registro de registro para el juicio de permiso if (con permiso) {try {doservice (solicitud, respuesta);} Catch (Excetpion e) {Información de excepción de registro}}}}} Doservice (solicitud httpservletRequest, respuesta httpservletreSponse) lanza ioexcetion, servletException; // Tenga en cuenta que el permiso de acceso se define como protegido, lo que parece profesional y riguroso, porque es} clase pública myServlet1 extiende BaseServlet {protegido Void Doservice (HttpServletRequest Solicitud, HttpServletResponse Respuesta) arroja IOEXCETIE, SERVLETEXCEPCITion {Códigos de lógica comercial específicos que solo este servidor procesa}}}}}}}}}}}}}}}}}}}}}}}}}}}Un cierto código en el medio del método de clase principal es incierto, por lo que lo dejo en la subclase, por lo que uso el método de plantilla para diseñar el patrón.
¿Puede el método abstracto ser estático al mismo tiempo, puede ser nativo al mismo tiempo y se puede sincronizar al mismo tiempo?
El método de abstracto no puede ser estático, ¡porque los métodos abstractos deben ser implementados por subclases, y Static no tiene nada que ver con las subclases!
El método nativo significa que el método debe implementarse en otro lenguaje de programación dependiente de la plataforma, y no hay ningún problema de implementación de subclase, por lo que no puede ser abstracto y no puede mezclarse con abstracto. Por ejemplo, la clase FileOutputSteam debe tratarse con hardware, y la implementación subyacente utiliza implementaciones de API relacionadas con el sistema operativo. Por ejemplo, se implementa en el idioma C en Windows. Por lo tanto, al observar el código fuente de JDK, puede encontrar que la definición del método abierto de FileOutputStream es el siguiente: Native Native Native Native Open (nombre de cadena) arroja FileNotFoundException;
Si queremos usar Java para llamar a la función del lenguaje C escrita por otros, no podemos llamarlo directamente. Necesitamos escribir una función de lenguaje C de acuerdo con los requisitos de Java, y nuestra función de lenguaje C llamará a las funciones de lenguaje C de otras personas. Dado que nuestra función del lenguaje C está escrita de acuerdo con los requisitos de Java, nuestra función del lenguaje C se puede conectar a Java. El método de acoplamiento en Java es definir el método correspondiente a nuestra función C. Los métodos correspondientes en Java no necesitan escribir un código específico, pero los nativos deben declararse anteriormente.
Para sincronizado, el objeto de bloqueo de sincronización utilizado por la sincronización sincronizada en el método es este, y el método abstracto no puede determinar qué es esto.
¿Qué es una clase interna? La clase anidada estática es diferente de la clase interior.
Una clase interna es una clase definida dentro de una clase. Los miembros estáticos no pueden definirse en una clase interna. Los miembros estáticos no son las características de un objeto. Solo necesitan encontrar un lugar para vivir, por lo que deben colocarse en una clase. La clase interna puede acceder directamente a las variables de los miembros en la clase externa. La clase interna se puede definir fuera de los métodos de la clase externa o en el cuerpo del método de la clase externa, como se muestra a continuación:
clase pública externa {int out_x = 0; Método publico de Void () {inner1 inner1 = new inner1 (); Clase pública Inner2 // Clase interna definida dentro del cuerpo del método {Public Method () {out_x = 3; }} Inner2 inner2 = new Inner2 (); } clase pública interna1 // clase interna definida fuera del cuerpo del método {}} Los tipos de acceso de la clase interna definidas fuera del cuerpo del método pueden ser públicos, protegidos y predeterminados privados. Esto es como las variables miembros definidas en la clase tienen 4 tipos de acceso, que determinan si la definición de la clase interna es visible para otras clases. En este caso, también podemos crear un objeto de instancia de la clase interior exterior. Al crear un objeto de instancia de la clase interna, primero debemos crear un objeto de instancia de la clase externa y luego usar el objeto de instancia de la clase externa para crear un objeto de instancia de la clase interna. El código es el siguiente:
Externo externo = nuevo externo ();
Externo.inner1 inner1 = outer.new innner1 ();
No puede haber modificadores de tipo de acceso antes de la clase interna definida dentro del método, al igual que las variables locales definidas en el método, pero los modificadores finales o abstractos se pueden usar antes de la clase interna. Esta clase interna no es visible para otras clases y no puede referirse a esta clase interna, pero los objetos de instancia creados por esta clase interna pueden pasar a otras clases para acceder. Este tipo de clase interna debe definirse primero y luego usarse, es decir, el código de definición de la clase interna debe aparecer antes de usar la clase, que es el mismo que el principio de que las variables locales en el método deben definirse primero y luego usarse. Esta clase interna puede acceder a variables locales en el cuerpo del método, pero el modificador final debe agregarse antes de la variable local.
En el cuerpo del método, la siguiente sintaxis se puede utilizar para crear una clase interna anónima, es decir, mientras definen una determinada interfaz o subclase de una clase, un objeto de instancia de la subclase también se crea sin definir un nombre para la subclase:
public class Outer {public void start () {new Thread (new Runable () {public void run () {};}). start (); }} Finalmente, puede prefijo la clase interna definida fuera del método para agregar una palabra clave estática a la clase anidada estática. Ya no tiene las características de una clase interna. Todo, en un sentido estrecho, no es una clase interior. La clase anidada estática no es diferente en el comportamiento y la función de las clases ordinarias en tiempo de ejecución, pero hay algunas diferencias en la sintaxis al programar las referencias. Se puede definir como tipos públicos, protegidos, predeterminados, privados y de otro tipo, mientras que las clases ordinarias solo pueden definirse como tipos públicos y predeterminados. El nombre de la clase de clase anidada estática afuera es "nombre de clase externa. Nombre de clase de entrada". Puede crear una clase anidada estática directamente sin crear un objeto de instancia de una clase externa afuera. Por ejemplo, si el interior es una clase anidada estática definida en la clase exterior, puede usar la siguiente declaración para crear la clase interna:
OUTER.inner Inner = new Outer.inner ();
Dado que la clase anidada estática no se basa en objetos de instancia de clases externas, la clase anidada estática puede acceder a variables miembros no estatales de clases externas. Al acceder a la clase anidada estática en una clase externa, puede usar directamente el nombre de la clase anidada estática sin agregar el nombre de la clase externa. En la clase anidada estática, también puede referirse directamente a las variables de miembros estáticos de la clase externa sin agregar el nombre de la clase externa.
La clase interna definida en un método estático también es una clase anidada estática. En este momento, no puede agregar la palabra clave estática antes de la clase. La clase anidada estática en un método estático es muy similar al método de aplicación de la clase interna en métodos ordinarios. Además de acceder directamente a las variables de miembros estáticos en la clase externa, también puede acceder a las variables locales en el método estático. Sin embargo, el modificador final debe agregarse antes de la variable local.
¿Puede una clase interna hacer referencia a sus miembros de la clase que contiene? ¿Hay alguna restricción?
Está totalmente bien. Si no es una clase interna estática, ¡no hay límite!
Si trata las clases anidadas estáticas como un caso especial de clases internas, en este caso, no puede acceder a las variables de miembros ordinarios de la clase exterior, sino solo miembros estáticos en la clase exterior. Por ejemplo, el siguiente código:
clase exterior {static int x; clase estática interior {void test () {syso (x); }}}}¿La clase interna anónima (clase interna anónima) puede extender (heredar) otras clases y puede implementos (implementar) interfaz (interfaz)?
Puede heredar otras clases o implementar otras interfaces. ¡No solo puede, sino que debe!
Por ejemplo:
import java.util.date; la prueba de clase pública extiende la fecha {public static void main (string [] args) {new test (). test (); } public void test () {System.out.println (super.getClass (). getName ()); }} El resultado es prueba
En el método de prueba, el método getClass (). GetName () se llama directamente y se devuelve el nombre de la clase de prueba. Dado que getClass () se define como final en la clase de objeto, la subclase no puede sobrescribir el método. Por lo tanto, llamar al método getClass (). GetName () en el método de prueba en realidad está llamando al método getClass () heredado de la clase principal, que es equivalente a llamar al método super.getclass (). GetName (). Por lo tanto, el método super.getClass (). GetName () también debe devolver la prueba. Si desea obtener el nombre de la clase principal, debe usar el siguiente código:
getClass (). GetsuperClass (). getName ();
¿Cuál es la diferencia entre orientado a objetos y orientado a procesos?
1 El punto de partida es diferente. El enfoque orientado a objetos es lidiar con el problema del mundo objetivo de una manera que se ajusta al pensamiento convencional. Enfatiza que los puntos clave del dominio del problema se aluden directamente a la interfaz entre objetos. El enfoque orientado al proceso enfatiza la abstracción y la modularidad del proceso, que es una construcción centrada en el proceso o se trata de problemas mundiales objetivos.
2. El método orientado a objetos utiliza la lógica de la computadora para simular la existencia física en el mundo objetivo, y utiliza la clase de recolección de objetos como la unidad básica para manejar problemas, para que el mundo de la computadora más se acerque al mundo objetivo tanto como sea posible, para que el problema sea más directo y claro. El método orientado a objetos utiliza la jerarquía de clases para reflejar la herencia y el desarrollo entre clases, mientras que el método de proceso orientado a objetos maneja los problemas con la unidad básica que permite el módulo que expresa clara y precisión el proceso, utiliza la jerarquía del módulo para resumir las relaciones y las funciones entre módulos o módulos, y abstrae el problema del mundo en el mundo en un proceso que puede ser procesado por los computadores.
3 El método de procesamiento de datos es diferente del método del programa de control. El método orientado al objeto encapsula los datos y el código correspondiente en un todo. En principio, otros objetos no pueden modificar directamente sus datos, es decir, la modificación de los objetos solo puede completarse por sus propias funciones miembros. El método del programa de control es activar y ejecutar el programa a través de "impulsado por eventos". El proceso orientado a objetos procesa directamente los datos a través del programa, y los resultados del procesamiento se muestran después de completar el procesamiento. En términos de control del programa, el programa se llama o devuelve al programa de acuerdo con el diseño, y no puede ser navegación. Existe una relación entre los módulos, entre el control y el control, y la llamada y la llamada.
4 El análisis de análisis y los métodos de conversión de codificación son diferentes. Un análisis de un enfoque orientado a objetos a lo largo del ciclo de vida del software. En diseño y codificación, es un proceso suave. Desde el análisis hasta el diseño y luego hasta la codificación, utiliza un modelo consistente para mostrar, es decir, es una conexión perfecta. El método de proceso orientado a objetos enfatiza la conversión entre el diseño analítico y la codificación de acuerdo con las reglas, y se logra el análisis y el diseño y la codificación a lo largo del ciclo de vida del software.
¿Cuáles son las ventajas del desarrollo orientado a objetos?
1 mayor eficiencia de desarrollo. El uso del desarrollo orientado a objetos puede abstraer cosas reales y mapear directamente las prácticas reales en objetos desarrollados.
2 Asegúrese de la robustez del software. Se debe precisamente a que el método de desarrollo orientado a objetos tiene una alta reutilización. Durante el proceso de desarrollo, el código existente que se ha probado en los campos relacionados se ha reutilizado. Por lo tanto, naturalmente juega un buen papel en la promoción de la robustez del software.
3 Asegurar un alto mantenimiento del software. Debido al método de desarrollo orientado a objetos, el código es muy bien legible. Al mismo tiempo, el patrón de diseño orientado a objetos deja la estructura del código más clara. Al mismo tiempo, para el modelo de desarrollo orientado a objetos, ya hay muchos patrones de diseño muy maduros. Estos patrones de diseño pueden permitir que los programas solo modifiquen algunos módulos cuando enfrentan cambios en la demanda, porque es más conveniente de mantener.
¿Cuál es la diferencia entre esto y súper?
En el idioma Java, esto apunta al objeto de instancia actual. Una de sus funciones muy importantes es distinguir las variables miembros de un objeto de los parámetros formales de un método (cuando el nombre de un método participa en la variable miembro, la variable miembro se sobrescribirá).
Super se puede utilizar para acceder a métodos o variables miembros de la clase principal. Cuando el método o variable miembro de la clase infantil tiene el mismo nombre que la clase principal, el método o la variable miembro de la clase principal también se sobrescribirá. Si desea acceder al método o una variable miembro de la clase principal, solo puede acceder a él a través de la palabra clave súper
Cómo obtener el nombre de clase de la clase matriz
Java Language proporciona un método para obtener el nombre de la clase: getClass (). GetName (). Los desarrolladores pueden llamar a este método para obtener el nombre de la clase. Sin embargo, para la herencia, el nombre de clase de la clase principal no se puede obtener llamando al método getClass (). GetName () de la clase principal, por ejemplo:
Clase A {} Public Class Test extiende una {public void test () {System.out.println (super.getClass (). GetName ());} public static void main (string []) args) {nuevo test.test ();}}El resultado de la ejecución del programa es la prueba. La razón es que cualquier clase en el idioma Java hereda de la clase de objetos. El método GetClass se define como el nativo final en la clase de objeto. Las subclases no pueden anular este método. Por lo tanto, this.getClass () y super.getClass () finalmente llaman al método getClass () en la clase de objeto. La definición del método getClass () en la clase de objeto es: devolver la clase de tiempo de ejecución de este objeto. El código de nombre de la clase principal se puede obtener en la subclase a través del mecanismo de reflexión de Java de la siguiente manera:
Clase A {} Test de clase pública extiende una {public void test () {System.out.println (this.getClass (). GetsuperClass (). GetName ());} publci static void main (string [] args) {nuevo test (). Test ();}}}}¿Cuál es la diferencia entre combinación y herencia?
La composición y la herencia son dos formas de reutilizar el código en los objetos orientados. La combinación se refiere a crear objetos de la clase original en una nueva clase y reutilizar las funciones de la clase existente. La herencia es una de las principales características de los objetos, lo que permite a los diseñadores definir la implementación de una clase basada en la implementación de otras clases. Tanto la composición como la herencia permiten la configuración de objetos infantiles en nuevas clases, excepto que se muestra la composición, mientras que la herencia es implícita. Existe una correspondencia entre la combinación y la herencia: toda la clase en la composición corresponde a la subclase en herencia, y la clase local en la composición corresponde a la clase principal en herencia. Al usarlo, siga los siguientes dos principios:
1 A menos que haya una relación "IS-A" entre dos clases, no use herencia fácilmente, porque el uso excesivo de la herencia destruirá la mantenibilidad del código. Cuando se modifica la clase principal, afectará a todas las subclases heredadas de ella.
2. No uses la herencia solo para lograr el polimorfismo. Si la relación entre clases no es "IS-A", puede lograr el mismo propósito implementando interfaces y combinaciones.
Dado que el lenguaje Java solo admite la herencia única, si desea heredar dos o más clases al mismo tiempo, no se puede implementar directamente en Java. Al mismo tiempo, en el idioma Java, si se logra demasiada herencia, el contenido en una clase se hinchará. Por lo tanto, en el idioma Java, si puede usar combinaciones, intente no usar la herencia.
Gracias por leer, espero que pueda ayudarte. ¡Gracias por su apoyo para este sitio!