594 votos

¿Por qué no puede métodos estáticos ser abstracta en Java

La pregunta es en Java, ¿por qué no puedo definir un resumen método estático? por ejemplo

abstract class foo {
    abstract void bar( ); // <-- this is ok
    abstract static void bar2(); //<-- this isn't why?
}

568voto

Tomalak Puntos 150423

Porque "abstracto" significa: "Implementa ninguna funcionalidad", y "estática" significa: "Hay una funcionalidad incluso si usted no tiene una instancia de un objeto". Y eso es una contradicción lógica.

147voto

GaryF Puntos 11921

No se puede invalidar un método estático, de modo que lo que es abstracto, no tendría sentido. Por otra parte, un método estático de una clase abstracta, pertenecen a esa clase, y no la clase de reemplazo, por lo que no se podía utilizar de todos modos.

72voto

Jared Puntos 7800

La abstract anotación a un método indica que el método DEBE ser anulada en una subclase.

En Java, static miembro (método o campo) no puede ser reemplazado por subclases (esto no es necesariamente cierto en otros lenguajes orientados a objetos, consulte SmallTalk.)

Desde los miembros estáticos no pueden ser anuladas en una subclase, la abstract anotación, no puede ser aplicada a ellos.

Como un aparte - otros idiomas soporte estático de la herencia, sólo como ejemplo de la herencia. A partir de una sintaxis de la perspectiva, de aquellos lenguajes que requieren generalmente el nombre de la clase para ser incluido en la declaración. Por ejemplo, en Java, suponiendo que usted está escribiendo código en ClassA, estos son equivalentes consolidados (si methodA() es un método estático, y no hay ninguna instancia método con la misma firma):

ClassA.methodA();

y

methodA();

En SmallTalk, el nombre de la clase no es opcional, por lo que la sintaxis es (tenga en cuenta que SmallTalk no hace uso de el . para separar el "sujeto" y el "verbo", sino que la utiliza como statemend terminator):

ClassA methodA.

Debido a que el nombre de la clase es siempre requerido, la correcta "versión" del método siempre puede ser determinada por la que atraviesan en la jerarquía de clases. Para lo que vale, hago de vez en cuando pierda static de la herencia, y fue mordido por la falta de estática de herencia en Java cuando empecé con ella. Además, SmallTalk es pato-escribió (y por lo tanto no programa de apoyo-por-contrato). Por lo tanto, no tiene abstract modificador para los miembros de la clase.

14voto

anshulkatta Puntos 1240

Yo también le hizo la misma pregunta , aquí está el por qué

Desde clase Abstracta, dice, no va a dar a la aplicación y permitir que la subclase para darle

así Subclase tiene para reemplazar los métodos de la Superclase ,

REGLA NO 1 - UN método estático no puede ser reemplazado

Dado que los miembros estáticos y métodos de compilación de los elementos , que es la razón por la Sobrecarga(tiempo de Compilación Polimorfismo) de los métodos estáticos son permitidos en lugar de Reemplazar (Polimorfismo de tiempo de ejecución)

Así que , que no puede ser Abstracto .

No hay ninguna cosa como resumen estática <--- No se permiten en Java Universo

Iteramos.com

Iteramos es una comunidad de desarrolladores que busca expandir el conocimiento de la programación mas allá del inglés.
Tenemos una gran cantidad de contenido, y también puedes hacer tus propias preguntas o resolver las de los demás.

Powered by:

X