Polymorphisme et héritage en Java avec des méthodes statiques de la classe abstraite

user1107888:

Je traversais les exemples de questions d'examen Java 8 programmeur I sur le site Web d'Oracle et suis tombé sur la question suivante:

abstract class Writer {
  public static  void write() {
    System.out.println("Writing...");
  }
 }
class Author extends Writer {
public static void write() {
       System.out.println("Writing book");
    }
 }
class Programmer extends Writer {
   public static void write() {
     System.out.println("Writing code");
   }
public static void main(String[] args) {
  Writer w = new Author();
   w.write();//What would be the ouput here?
    }
 }

La bonne réponse est que la méthode de la classe abstraite est appelée.

Maintenant, je crois comprendre que le polymorphisme, si une variable de classe parente de type contient une référence à un objet de la sous-classe, puis sera appelée la méthode de la sous-classe.

Par conséquent, ce que je comprends bien que dans le cas d'une fonction statique, la méthode de la classe dont la variable contient la refrence serait appelé?

GhostCat de Monica C.:

Il n'y a pas de polymorphisme pour les méthodes statiques.

Le compilateur décide au moment de la compilation quelle méthode va être invoquée.

Il voit que w est un écrivain, et il ne sait ni ou les soins que l'instance réelle sera de cette sous classe à l'exécution spécifique. Le compilateur peut connaître parfois, mais Java prend le chemin facile ici.

C'est l'une des raisons pour lesquelles vous êtes très prudent sur l'utilisation de méthodes statiques en temps réel le code de production mondiale: faire sacrifier l'un des éléments essentiels de la POO.

Je suppose que tu aimes

Origine http://43.154.161.224:23101/article/api/json?id=204142&siteId=1
conseillé
Classement