java - clases - para que sirve una clase abstracta




¿Podemos usar el método estático en una clase abstracta? (3)

En Java Programming, ¿podemos llamar a un método estático de una clase abstracta?
Sí, sé que no podemos usar estática con un método de una clase abstracta. pero quiero saber por qué ..?


Aquí hay una explicación simple. Los métodos abstractos deben implementarse más tarde. Sabemos que los métodos estáticos no pueden anularse porque los métodos estáticos no pertenecen a ninguna instancia en particular, sino que pertenecen a la clase. Luego, la implementación diferente del método abstracto, que es estático, en diferentes clases es contrario a la intuición.


En Java puedes tener un método estático en una clase abstracta:

abstract class Foo {
   static void bar() { }
}

Esto está permitido porque ese método se puede invocar directamente, incluso si no tiene una instancia de la clase abstracta:

Foo.bar();

Sin embargo, por la misma razón, no puede declarar que un método estático sea abstracto. Normalmente, el compilador puede garantizar que un método abstracto tendrá una implementación real cada vez que se llame, porque no puede crear una instancia de una clase abstracta. Pero dado que se puede llamar directamente a un método estático, hacerlo abstracto haría posible llamar a un método indefinido.

abstract class Foo {
   abstract static void bar();
}

// Calling a method with no body!
Foo.bar();

En una interfaz, todos los métodos son implícitamente abstractos . Esta es la razón por la cual una interfaz no puede declarar un método estático. (No existe una razón arquitectónica por la que una interfaz no pueda tener un método estático, pero sospecho que los redactores del JLS consideraron que eso alentaría el uso indebido de las interfaces)


Si está hablando de Java, la respuesta es Sí, pero necesita definir el método estático. No puedes crear un método estático abstracto. Lo que puedes crear es un método estático no abstracto.

La razón es que no necesita una instancia de objeto para acceder a un método estático, por lo que necesita que el método se defina con cierta funcionalidad.

entonces no puedes tener,

  abstract class AbstractClassExample{
     abstract static void method();


}  

Pero puedes tener,

abstract class AbstractClassExample{

     static void method(){}
}  

Espero que esto ayude...





abstract