una sirve que para clases clase abstractas abstracta java interface static abstract

java - sirve - ¿Podemos usar el método estático en una clase abstracta?



clases abstractas (4)

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)


Sí, por supuesto, puede definir el método estático en la clase abstracta. puede llamar a ese método estático mediante el uso de la clase abstracta, o mediante el uso de la clase infantil que amplía la clase abstracta. También puede invocar el método estático a través de la instancia / el objeto clase del niño. Para ilustrar más prueba siguiente ejemplo.

//Parent class public abstract class TestAbstractClass { static void testStaticMethod(){ System.out.println("In Parent class static method"); } } //child class public class ChildClass extends TestAbstractClass { public static void main(String[] args) { TestAbstractClass parentObj = new ChildClass(); parentObj .testStaticMethod(); ChildClass childObj = new ChildClass(); childObj.testStaticMethod(); TestAbstractClass.testStaticMethod(); childClass.testStaticMethod(); } }


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...