85 votes

Pourquoi les constructeurs ne peuvent-ils pas être finaux, statiques ou abstraits ?

Pourquoi les constructeurs ne peuvent-ils pas être finaux, statiques ou abstraits en Java ?

Par exemple, pouvez-vous m'expliquer pourquoi ceci n'est pas valable ?

public class K {

    abstract public K() {
        // ...
    }
}

2 votes

Considérer ce que chacun de ces mots-clés fait pour les autres méthodes. Parfois, cela n'a aucun sens dans le contexte d'un constructeur, d'autres fois, c'est déjà implicite.

4 votes

Pourquoi voulez-vous un constructeur statique ? Cette question semble être un problème de devoir.

0voto

edam Points 443

Malheureusement, en PHP, le compilateur ne soulève pas de problème pour les deux types d'utilisateurs abstract y final constructeur.

<?php

abstract class AbstractClass 
{
   public abstract function __construct();
}

class NormalClass 
{
    public final function __construct() {
        echo "Final constructor in a normal class!";
    }
}

En PHP static n'est pas autorisé et soulèvera fatal exception.

Ici, dans AbstractClass évidemment, un constructeur peut être déclaré comme abstrait plus non implémenté ou il peut être déclaré comme quelque chose parmi ( final , public , private , protected ) plus un corps de fonction .

Quelques autres informations sur le PHP :

  1. En PHP, avoir plusieurs constructeurs __construct() n'est pas possible.
  2. En PHP, un constructeur __construct() peut être déclaré comme abstract , final , public , private y protected !

Ce code a été testé et est resté vrai dans les versions de PHP de 5.6 à 7.4 !

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X