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.

6voto

Jimit Rupani Points 438

Non Les constructeurs ne peuvent JAMAIS être déclarés comme finaux. Votre compilateur donnera toujours une erreur du type "modificateur final non autorisé". Final, lorsqu'il est appliqué à des méthodes, signifie que la méthode ne peut pas être surchargée dans une sous-classe. Les constructeurs ne sont PAS des méthodes ordinaires. (des règles différentes s'appliquent) De plus, les constructeurs ne sont JAMAIS hérités. Il n'y a donc aucun sens à les déclarer finales.

3voto

jaskirat Singh Points 65
  1. Les constructeurs ne sont PAS des méthodes ordinaires. (des règles différentes s'appliquent)
  2. De plus, les constructeurs ne sont JAMAIS hérités. Il n'y a donc aucun sens à le déclarer final. Non Les constructeurs ne peuvent JAMAIS être déclarés finaux. Votre compilateur donnera toujours une erreur du type "modifer final not allowed".
  3. Vérifiez la section 8.8.3 de JLS (les documents JLS et API doivent être vos principales sources d'information).

2voto

Oh Chin Boon Points 7667

JLS section 8 mentionne ceci.

Les constructeurs (§8.8) sont similaires aux méthodes mais ne peut être invoqué directement par un appel de méthode ; ils sont utilisés pour initialiser les nouvelles de classe. Comme les méthodes, ils peuvent être surchargés (§8.8.8).

Mais les constructeurs ne sont pas des méthodes normales. Ils ne peuvent pas être comparés comme tels.

1voto

Muneeb Nasir Points 2244

Pourquoi le constructeur ne peut pas être statique et final sont bien définis dans les réponses ci-dessus.

Abstrait : "Abstrait" signifie qu'il n'y a pas d'implémentation. et il ne peut être implémenté que par héritage. Ainsi, lorsque nous étendons une classe, tous les membres de la classe mère sont hérités dans la sous-classe (classe enfant), sauf le "Constructeur". Donc, supposons que vous parveniez à déclarer le constructeur "abstrait", comment pouvez-vous donner sa mise en œuvre dans la sous-classe, si le constructeur n'est pas hérité dans la classe enfant ?

c'est pourquoi le constructeur ne peut pas être abstrait.

0voto

veeresh kalyan Points 9

Voyons d'abord final public K(){

*au-dessus du modificateur final est restrictif parce que si c'est final alors il y a une situation où dans une autre classe ou dans la même classe seulement on va l'écraser donc ça ne va pas arriver ici proximately not final par exemple :

we want public void(int i,String name){
//this code not allowed

let static,, static c'est tout au niveau de la classe mais nous créons le constructeur basé sur l'objet en utilisant le mot clé 'new' so,,,,,, thatsall

abstract itz worst about here not at 'cause not have any abstract method or any declared method

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