2008-11-03 23 views
13

Estoy trabajando con algunas tareas y una pregunta en un documento de examen anterior pide que se nombren todas las clases abstractas en un diagrama UML dado. Bastante sencillo, supongo. Hay una clase abstracta y tres interfaces. ¿Estas interfaces califican como clases abstractas, en general?¿Es una interfaz de Java una clase abstracta?

+0

Acabo de agregar una explicación acerca de la diferencia entre la interfaz y la clase – VonC

Respuesta

23

Lo que pasa es que, aunque técnicamente las interfaces pueden representarse como clases en idiomas como Java, no las consideraría como clases.

Resumen? Oh sí. ¿Clase? No.

Las interfaces no pueden tener constructores, ni propiedades, campos, cuerpos de funciones, etc. Las interfaces no se pueden heredar, se implementan (nuevamente, técnicamente podría ser cierto que implementar una interfaz realmente lo hereda en idiomas específicos, pero ese no es mi punto.) Las interfaces son más como 'contratos', ya que no definen ningún tipo de comportamiento como las clases.

Ahora, si esto es una tarea, entonces no deberías discutir sobre este tipo de cosas con el maestro. Simplemente revise las notas de su clase y vea si la palabra "clase" se menciona en cualquier parte de la definición de interfaz de su profesor.

+2

Las interfaces se pueden heredar: una interfaz puede ampliar otra interfaz – Bohemian

1

Sí, una interfaz es implícitamente abstracta. Mire detrás de las escenas en cuanto a la forma en que está codificada en un archivo .class.

La semántica es algo divertido; en condiciones de examen, la "clase abstracta" debería compilarse literalmente a partir de un archivo fuente .java utilizando abstract class en la declaración de la Clase.

6

Todas las interfaces son indeed abstract

En realidad, se puede declarar un método tan abstracto en una interfaz ... excepto cualquier herramienta 'Checkstyle' le dirá la palabra clave abstracta es redundante. Y todos los métodos son públicos.

Si una clase implementa una interfaz y no implementa todos sus métodos, debe marcarse como abstracta. Si una clase es abstracta, se espera que una de sus subclases implemente sus métodos no implementados.

Para repetir otras respuestas, un interface is not a class.

Una interfaz es tipo de referencia, similar a una clase, que solo puede contener constantes, firmas de métodos y tipos anidados. No hay cuerpos de método. No se pueden crear instancias de interfaces: solo pueden implementarse por clases o extenderse por otras interfaces.

Las interfaces no son parte de la jerarquía de clases, aunque funcionan en combinación con las clases.

Cuando define una nueva interfaz, está definiendo un nuevo tipo de datos de referencia. Puede usar nombres de interfaz en cualquier lugar donde pueda usar cualquier otro nombre de tipo de datos. Si se define una variable de referencia cuyo tipo es una interfaz, cualquier objeto se asigna a ella debe ser una instancia de una clase que implementa la interfaz


Para explicar mejor por qué una interfaz no es una clase, considere lo siguiente :

1/una interfaz es un tipo utilizado por valores

2/a clase es para objetos

3 /:

Object a = new Date(); 
String s = a.toString(); 
  • El tipo de la variable 'a' es objeto (que es en realidad una notación de tipo en el código fuente de Java significa una referencia a un objeto),
  • pero el clase del objeto al que apunta es Fecha.

El tipo (Objeto) sólo afecta a lo que el código es válido según el tipo de comprobación del compilador, pero no lo que realmente hace el código.

La clase del objeto afecta a lo que hace el código, de modo que la llamada a.toString() en la segunda línea devuelve una cadena que se parece a una fecha, no una que se parece a "[email protected] ".

Como una interfaz es un tipo, se usa solo para valores y no representa lo que los objetos realmente harán en términos de tiempo de ejecución.

1

Usted solo ha preguntado por el lado abstracto, pero no olvide el lado de la clase: no llamaría a una interfaz una clase, así que aunque las interfaces son abstractas (as per the specification), todavía no creo que contar como clases abstractas. Puede valer la pena explicar explícitamente que aunque :)

3

En Java, sin embargo, hay un giro en el cuento: ¡todas las interfaces en Java extienden java.lang.Object! Intente agregar un método:

public void notify();

en una interfaz y ver qué pasa ..

Una interfaz de extender una clase - ¿Tiene que hacer la interfaz de una clase? ¿O la clase una interfaz? Uhh-huh ... Supongo que era un truco que tenía para evitar que las interfaces anularan las definiciones en java.lang.Object de que las implementaciones de la interfaz debían extenderse de todos modos.

0

Una interfaz contiene prototipo de métodos (es decir Declaración) no defination pero la clase abstracta puede contener defination de método & al menos un método abstracto (método con sólo el prototipo)

0

Interfaces se utilizan para romper la Inheritance Object. Podrían contener dos o más objetos de varias clases y jerarquías de clases. Mire una interfaz como un enchufe de salida. Todas las clases que implementan una interfaz necesitan tener una, la misma forma en que una computadora, una máquina de café, un ventilador y un refrigerador necesitan tener el mismo dispositivo para obtener la energía .

0

La clase abstracta parece interfaz. Las clases abstractas pueden tener implementaciones donde la interfaz no puede tener implementaciones.

Luego, hay una pregunta. ¿Podemos llamar clase abstracta como interfaz si solo tienen firmas de métodos?

Creo que las clases abstractas, a diferencia de las interfaces, son clases.Son caros de usar porque hay una búsqueda que hacer cuando heredas una clase de la clase abstracta.

Cuestiones relacionadas