7
votes

Une classe abstraite peut-elle avoir une méthode finale?

Une classe abstraite peut-elle avoir une méthode finale en Java?


0 commentaires

12 Réponses :


1
votes

Oui, ces méthodes ne peuvent pas être remplacées dans les sous-classes. Un exemple de c'est le modèle de méthode de modèle ...


2 commentaires

Vous devriez donner plus d'explications. La méthode de modèle n'implique pas la finale, bien que cela rend certainement la vie plus simple.


OK, disons finale est fortement recommandé :) Je le considère comme une erreur de ne pas utiliser finale pour la méthode de modèle ...



1
votes

Oui, il peut ... Besoin de plus de caractères


0 commentaires

1
votes

Bien sûr, cela signifie que vous pouvez le sous-classer, mais vous ne pouvez pas remplacer cette méthode particulière.


0 commentaires

0
votes

oui. Le modificateur abstraite permet d'omettre une partie de la mise en œuvre d'une classe (c'est-à-dire avoir des méthodes abstraites ) mais n'impose aucune restriction sur vous.


0 commentaires

2
votes

oui.

Astuce: il suffit de reposer votre IDE préféré (Eclipse, Netbeans, etc.) et essayez-la. Il se plaint si cela ne fonctionne pas.


7 commentaires

-1. Le point de ne pas dire aux gens "l'essayer toi-même". Il s'agit d'un gaspillage d'effort et de temps si tous ceux qui font une recherche sur Internet de cette question doivent lancer une IDE et l'essayer pour eux-mêmes lorsque quelqu'un peut fournir une réponse complète et complète à la question suivante: Stackoverflow.com/questions/1299398/1299434#1299434


Oui, votre droit et j'accepte le bowvote, mais c'est la troisième question triviale de Keyur sur les classes abstraites de la ligne, donc j'ai fait une exemption.


@Andreas_d: J'ai manqué que Keyour avait demandé de nombreuses questions sur le même sujet et j'avais déjà vu suffisamment "Pourquoi ne l'essayez-vous pas pour vous-même" les réponses et les commentaires de ce matin que j'ai réagi un peu trop vite avec le Downvote. Je l'ai supprimé (cela signifie-t-il que vous récupérez votre représentant?) Depuis que votre réponse n'est pas réellement incorrecte.


@Andreas_d: ceux qui recherchent différents aspects, raisons et explications sur l'utilisation de méthodes finales dans des classes abstraites par exemple. Via Google ne se soucient pas vraiment des autres questions de KeyUR (ni i), ce qui donne une réponse inutilement sarcastique juste pour "punir" l'OP (faisant référence à d'autres questions stupides) n'est pas un bon point. Ceux-ci «Essayez-vous vous-même» --answers N'aidez pas du tout. Pensez également aux personnes qui veulent simplement connaître la réponse (rapidement) ou n'ont pas la possibilité d'essayer cela à ce moment même (assis sur le bus, à l'aide d'un téléphone portable). BTW Cette question n'est pas "triviale" . -1, désolé.


@ Sk8erpeter - Avez-vous consulté la date de cette question? Il a quatre ans, Keyur a disparu (gris) et aurait été fermé immédiatement s'il est apparu ces jours-ci :) Jetez un coup d'œil à mon commentaire au premier bulletin descendant qui explique tout pour cette question;)


@Andreas_d: Yepp, j'ai vu la date de la question - pourquoi est-ce important? Les classes abstraits Java peuvent toujours avoir des méthodes finales ...;) (il peut toujours être expliqué ce qu'il peut être utilisé pour.) Et oui, j'ai vu ce que vous avez écrit comme une "explication", c'est pourquoi j'ai répondu que personne ne se soucie que stupide d'autres questions les questions éventuellement posées (s'il l'a fait, il obtient des valeurs descendantes dans le sujet de l'autre question et quoi? Pourquoi est-ce important dans Ce sujet ?), et que Je ne pense pas que cette question soit " trivial " (J'ai cité votre mot, de sorte que vous pourriez savoir que j'ai lu votre explication, ce qui ne le fait pas mieux réponse).


Il y a quatre ans, si vous aviez suivi ce thread, vous auriez filé différent. Il y avait un temps à ce moment-là où cela était assez habituel et je ne supprimerai ni ne change cette réponse que parce que les choses se sont améliorées. Comme je l'ai dit, la question aurait été évitée à -6 et fermée dans les 10 minutes de ces jours-ci.



40
votes

Bien sûr. Jetez un coup d'œil au Modèle de modement de modèle pour un exemple.

abstract class Game
{
    protected int playersCount;

    abstract void initializeGame();

    abstract void makePlay(int player);

    abstract boolean endOfGame();

    abstract void printWinner();

    /* A template method : */
    final void playOneGame(int playersCount) {
        this.playersCount = playersCount;
        initializeGame();
        int j = 0;
        while (!endOfGame()) {
            makePlay(j);
            j = (j + 1) % playersCount;
        }
        printWinner();
    }
}


4 commentaires

excellent! UPVOTE pour avoir présenté le modèle de méthode de modèle


Mais quelle est l'utilisation de cela


@Bill le lézard: excellente réponse! Mais j'ai une question: que si la méthode PlayoneGame () était normale (non finale). C'était la même chose? Quel avantage d'utiliser final ici au lieu de ne pas utiliser de mot-clé? Merci


@BillTheLizard: Merci mais je n'ai pas trouvé quels sont les avantages de l'utilisation du mot clé final sans aucun mot clé.



7
votes

Oui, ça peut. Mais la méthode finale ne peut pas être abstraite elle-même (d'autres méthodes non finales dans la même classe peuvent être).


0 commentaires

2
votes

oui.


1 commentaires

C'est bon de devenir paresseux et de donner une réponse en oui et non seulement, lorsque l'utilisateur lui-même est également trop paresseux. Je pense que votre réponse mérite pour une personne comme de mon côté.



0
votes

dans les méthodes de classe abstraite peut être définie ou non. Si nous étendons la classe abstraite, il suffit que de cela signifie que les méthodes de toutefois que nous déclarons ou définies dans des appels abstraits, il sera sur la sous-classe. Nous pouvons donc déclarer une méthode de dernière classe abstraite, et elle sera terminée à la sous-classe.


1 commentaires

Je vois ce que vous essayez de dire ici, mais s'il vous plaît éditer votre réponse car il est très peu clair maintenant.



5
votes

Oui, il peut y avoir des méthodes "finales" dans la classe "abstraite". Mais toute méthode "abstraite" dans la classe ne peut pas être déclarée finale. Il donnera "combinaison illégale de modificateurs: abstrait et finale" forte> erreur. xxx pré>

Voici l'exemple de travail de la mise en œuvre. P>

Yes
Overridden
Success overriding


0 commentaires

0
votes

Supposons que je souhaite une classe conçue, qui a une implémentation, mais je ne veux pas que d'autres (sous-classes) puissent la mettre en œuvre, mais d'autres méthodes, alors dans ce cas, nous avons besoin d'une méthode mise en œuvre définitive et de classe d'abstraction de choix évidente.


0 commentaires

0
votes

Oui, nous pouvons écrire la méthode finale avec la mise en œuvre.

public abstract class AbstractWithfinalMethod {
  public static  final boolean m1() {
    System.out.println(" M1 method executed");
    return true;
  }

  public static void main(String[] args) {
    System.out.println(m1());
  }
}


0 commentaires