La diferencia y la función de la interfaz y la clase abstracta

Reimpreso: https://blog.csdn.net/u012092924/article/details/78342193

Concepto: la
abstracción y la concreción son relativas, no absolutas. En pocas palabras, cuanto menor es la connotación del concepto, mayor es el grado de abstracción y mayor es su extensión, y viceversa. Por ejemplo, "humano" es más abstracto que "hombre", "biológico" es más abstracto que "humano" y "materia" es más abstracto que "biológico".
Los conceptos abstractos son producidos por conceptos concretos de acuerdo con su "comunidad". Excluir a muchas personalidades de conceptos concretos y describir colectivamente su comunidad producirá un concepto abstracto. El pensamiento abstracto es una habilidad producida por el pensamiento humano en la etapa avanzada. Por ejemplo, cuando el pensamiento de los niños aún no está maduro, solo pueden comprender conceptos específicos. A menudo encuentran dificultades para aprender el pronombre "tú, yo, él" porque Los pronombres son muy abstractos.
En resumen, la extensión de conceptos abstractos es grande, y la connotación es pequeña, y la extensión de conceptos específicos es pequeña, y la connotación es grande.
Primero, la diferencia entre clases abstractas y clases ordinarias:
1, las clases ordinarias pueden ser llamadas instanciadas; las clases abstractas no pueden ser instanciadas, porque existe en un concepto y no no específico.

2. Las clases ordinarias y abstractas se pueden heredar, pero las subclases deben anular los métodos heredados después de que se herede la clase abstracta, a menos que la clase propia también sea una clase abstracta.

 

public class Pet {  
  
public void play(){                //这是宠物类,普通父类,方法里是空的  
}  
}  
--------------------------  
public class Cat extends Pet {    //这是子类,是一个猫类,重写了父类方法  
public void play(){  
  System.out.println("猫爬树");  
}  
}  
------------------------  
public class Dog extends Pet {    //这是子类,是一个狗类,重写了父类方法  
  public void play(){  
  System.out.println("狗啃骨头");  
 }  
}  
-------------------------  
public class Test {  
public static void main(String[] args) {  //这是测试类,分别调用了子类的不同方法  
  
Pet p1=new Dog();                               //多典型的多态表现啊,相当的给力  
Pet p2=new Cat();  
  
p1.play();  
p2.play();  
}  
}  

Salida: los
perros mastican huesos, los
gatos trepan a los árboles

Problema: cambie la clase padre a una clase abstracta, y el método a un método abstracto, luego
public void play (); // el método abstracto no tiene ninguna
subclase del cuerpo del método sin cambios, aún reescribe el método de la clase padre, entonces esto no es diferente de la clase padre ordinaria ¿Eh?
¿Se podría decir que un método abstracto está terminado sin un cuerpo de método? ? Entonces tengo un cuerpo de método para métodos ordinarios. Si lo dejo vacío, no lo obtendré. ¿No es lo mismo que un método abstracto? ?
¡No me digas que la clase abstracta no puede ser instanciada, y no necesitas actualizarla!
Se pueden hacer clases ordinarias, ¿cuál es el punto de obtener una clase abstracta? He dicho antes que los métodos de las clases ordinarias pueden dejarse en blanco y no escribirse, para lograr el mismo efecto que el de los métodos de clases abstractas sin métodos.
Dado que ambos métodos pueden lograr el mismo efecto de salida, no es suficiente obtener un método, entonces, ¿por qué crear una clase abstracta? ¿Es más cómodo mirar que la clase ordinaria? Usado genial? ¿O es más conveniente? ¿O tienes que forzar la implementación de métodos abstractos para obligar a otros a usarlo? ¿Qué olvidas?
R: Es para imponer que no se puede instanciar, y para forzar a las subclases a implementar métodos. Este no es un problema
que no olvidará. Dice que no necesita ir a un nuevo. Es cierto.
Entonces piensa otra pregunta, ¿por qué tiene control de acceso? Que? ¿Por qué hay una diferencia entre privado y público?
Puedo acceder a todos ellos públicamente, y no debería tener acceso a ellos. No tengo que visitarlos. No
puedo ver la diferencia en el applet. Por el contrario, los miembros privados tienen que escribir un montón de conjuntos y obtener funciones. Lazy todo público
pero el proyecto es grande y
hay muchos códigos. Esta estructura rigurosa es muy importante. Sin mencionar que habrá muchas personas trabajando juntas para escribir un programa juntos, incluso si lo escribes tú mismo, no hay tiempo para olvidarlo. El compilador no informa un error. ¿Dónde puedo encontrar errores en el vasto mar de código?
En última instancia, la orientación a objetos es conveniente para usted, modular, fácil de mantener y administrar. , La eficiencia operativa sigue siendo alta.

En segundo lugar, la diferencia entre clases abstractas e interfaces:
1, el concepto es diferente. Una interfaz es una abstracción de acciones, y una clase abstracta es una abstracción de esencia.
La clase abstracta representa lo que es este objeto. La interfaz representa lo que este objeto puede hacer. Por ejemplo, hombres, mujeres, estas dos categorías (si es ...), su categoría abstracta es humana. Explique que todos son humanos. Las personas pueden comer y los perros pueden comer. Puede definir "comer" como una interfaz y luego dejar que estas clases lo implementen.
Por lo tanto, en un lenguaje de alto nivel, una clase solo puede heredar una clase (clase abstracta) (así como los humanos no pueden ser biológicos y no biológicos), pero puede implementar múltiples interfaces (interfaz de alimentación, interfaz de caminar).

2. El uso es diferente:

Las clases abstractas y las interfaces se usan para abstraer objetos concretos, pero el nivel abstracto de las interfaces es el más alto
. Las clases abstractas pueden tener métodos y propiedades específicos, las interfaces solo pueden tener métodos abstractos y constantes inmutables
. Las clases abstractas se usan principalmente. Las categorías abstractas, las interfaces se utilizan principalmente para funciones abstractas
D. Clases abstractas, y no contiene ninguna implementación, las clases derivadas deben anularlas. Todos los métodos en la interfaz no deben implementarse.

e. La interfaz es el resultado del diseño, la clase abstracta es el resultado de la refactorización

3. Dirección de uso: cuando te enfocas en la esencia de una cosa, usa una clase abstracta, cuando te enfocas en una operación, usa una interfaz.
Nota: La función de las clases abstractas es mucho mayor que la de las interfaces, pero el costo de definir clases abstractas es alto. Debido a los lenguajes de alto nivel (en términos de diseño real), cada clase solo puede heredar una clase. En esta clase, debe heredar o escribir todos los elementos comunes de todas sus subclases. Aunque la interfaz es mucho más débil en función, es solo una descripción de una acción. Y puede implementar múltiples interfaces al mismo tiempo en una clase. Reducirá la dificultad durante la etapa de diseño.

Publicado 51 artículos originales · ganado elogios 4 · Vistas 7869

Supongo que te gusta

Origin blog.csdn.net/u012174809/article/details/104969296
Recomendado
Clasificación