Peut-on utiliser la méthode statique dans une classe abstraite?

En Programmation Java, Peut-on appeler une méthode statique d'une classe abstraite?

Oui, je sais qu'on ne peut pas utiliser la statique avec une méthode de classe abstraite. mais je veux savoir pourquoi.. ?

38
demandé sur AADProgramming 0000-00-00 00:00:00

4 réponses

En Java, vous pouvez avoir une méthode statique dans une classe abstraite:

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

ceci est autorisé parce que cette méthode peut être appelée directement, même si vous n'avez pas d'instance de la classe abstraite:

Foo.bar();

Cependant, pour la même raison, vous ne pouvez pas déclarer qu'une méthode statique est abstraite. Normalement, le compilateur peut garantir qu'une méthode abstraite aura une réelle implémentation à chaque fois qu'elle est appelée, parce que vous ne pouvez pas créer une instance d'un Abstrait classe. Mais puisqu'une méthode statique peut être appelée directement, la rendre abstraite permettrait d'appeler une méthode non définie.

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

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

Dans une interface, toutes les méthodes sont implicitement abstraite. C'est pourquoi une interface ne peut pas déclarer une méthode statique. (Il n'y a pas de raison architecturale pour qu'une interface ne puisse pas avoir une méthode statique, mais je soupçonne que les rédacteurs du JLS ont pensé que cela encouragerait une mauvaise utilisation des interfaces)

44
répondu Russell Zahniser 2013-07-01 14:54:40

si vous parlez de java, la réponse est Oui mais vous devez définir la méthode statique. Vous ne pouvez pas créer une méthode statique abstraite. Ce que vous pouvez créer est méthode statique non abstraite.

raison est que vous n'avez pas besoin d'une instance objet pour accéder à une méthode statique, donc vous avez besoin que la méthode soit définie avec une certaine fonctionnalité.

si vous ne pouvez pas avoir,

  abstract class AbstractClassExample{
     abstract static void method();


}  

Mais vous pouvez avoir,

abstract class AbstractClassExample{

     static void method(){}
}  

J'espère que aider...

20
répondu Dulanga 2013-07-01 15:00:27

Voici une explication simple.Méthodes abstraites doivent être mises en œuvre plus tard.Nous savons que les méthodes statiques ne peuvent pas être supplantées parce que les méthodes statiques n'appartiennent pas à une instance particulière, mais plutôt à la classe.Ensuite, une implémentation différente de la méthode abstraite,qui est statique, dans différentes classes est contre-intuitive.

3
répondu Afif 2016-05-27 22:31:24

Oui, bien sûr, vous pouvez définir la méthode statique dans la classe abstraite. vous pouvez appeler cette méthode statique en utilisant la classe abstraite,ou par l'utilisation d'enfants de la classe qui étend la classe abstraite.Vous pouvez aussi appeler la méthode statique à travers la classe enfant instance/object. Pour illustrer un autre test suivant l'exemple.

//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();
    }
}
3
répondu CodeNinja 2016-07-18 14:30:25