Pourquoi pas une classe Java être à la fois abstraites et finales
Supposons que j'ai une classe utilitaire qui ne contient que des méthodes statiques et variables. e.g:
public abstract final class StringUtils
{
public static final String NEW_LINE = System.getProperty("line.separator");
public static boolean isNotNullOrSpace(final String string)
{
return !(string == null || string.length() < 1 || string.trim().length() < 1);
}
}
Dans ce scénario, il est logique de faire la classe à la fois abstraites et finales. Abstrait parce que la réalisation d'un objet de cette classe seront d'aucune utilité puisque toutes les méthodes sont accessibles de manière statique. Finale parce que la classe dérivée ne peut pas héritent de cette classe qu'il n'a pas tout non-membre statique.
C# permet statique modificateur de telles classes. Pourquoi ne pas le support de Java?
En raison des différentes spécifications de langue ?? Ensuite, il est
Lire ceci: stackoverflow.com/questions/3584113/...
grâce Bart. Vous avez fourni la bonne réponse. Je peux avoir un dernier de la classe avec un constructeur privé.
Vous avez confondu ce
true
.Lire ceci: stackoverflow.com/questions/3584113/...
grâce Bart. Vous avez fourni la bonne réponse. Je peux avoir un dernier de la classe avec un constructeur privé.
Vous avez confondu ce
final
moyens; final
est équivalent à C#'s sealed
, pas static
.public final abstract class ChuckNorris extends ChuckNorris {}
OriginalL'auteur PC. | 2013-10-01
Vous devez vous connecter pour publier un commentaire.
Un
final
classe ne peut pas être prolongé, uneabstract
classe besoins être étendue afin d'être instancié. Par conséquent, unfinal abstract
classe serait une contradiction logique.Si votre classe juste
static
méthodes, peut-être vous devriez justehide
son constructeur, en le définissant commeprivate
.-abstract
n'est pas pour être héritée. Il n'est pas possible d'instancier.Vous avez raison, juste qu'il est corrigé, merci 🙂
Je sais que c'est l'idée de base d'un langage orienté objet. Mais dans mon exemple il n'y a pas de contradiction. Je ne veux pas prolonger ou instancie ma classe.
Mmh comme pour moi, la classe abstraite du sens lorsque vous ajoutez des méthodes abstraites. Si vous ne voulez pas que votre classe soit instancié, vous devriez envisager de définir son constructeur par défaut comme privé.
Veuillez expliquer pourquoi une classe n'étant pas instanciables (abstrait), ni de l'être extensible (final) est une contradiction. Java ne permet de déclarer à la fois avec un mot-clé sur la classe de ne pas faire en sorte! C'est toujours pas rare de hack autour de que par l'aide d'un constructeur privé et de la discipline.
OriginalL'auteur ssantos
Il n'est pas possible parce que le langage Java spécification stipule que:
Autre que cela, il n'y a aucune raison pour un résumé final de classe serait illogique - le mot résumé est généralement utilisé par opposition à béton à dire qu'aucune des instances d'un type peuvent exister.
C'est la même raison pourquoi les méthodes abstraites ne peuvent pas avoir de modificateur d'accès privé.
OriginalL'auteur Joe Lee-Moyet
Il n'y a pas de raison, à l'exception de la subjectivité, mais vous pouvez atteindre le même objectif par
faire de votre classe abstraite et de faire tous vos méthodes de finale. Comme:
Le compilateur va vérifier cela et donner un message d'erreur si vous essayez d'instancier un objet de Maclasse, et il ne sera pas possible de surcharger la méthode final lors d'une sous-classe Maclasse extends
OriginalL'auteur user1515520
Une méthode ne peut jamais, jamais, jamais être marqués comme étant à la fois abstraites et finales, ou les deux
résumé et privé. Pensez—méthodes abstraites doivent être mis en œuvre
(ce qui signifie essentiellement remplacée par une sous -) considérant que la finale et privé
les méthodes ne peuvent pas toujours être remplacée par une sous-classe. Ou pour l'exprimer d'une autre manière, une
résumé désignation signifie que la classe mère ne sait rien sur la façon
les sous-classes doivent se comporter dans cette méthode, alors qu'une désignation définitive des moyens
la superclasse sait tout au sujet de la façon dont toutes les sous-classes (cependant loin en bas de la
l'arbre de l'héritage qu'ils soient) doivent se comporter dans cette méthode. Le résumé et les
final modificateurs sont presque opposés. Parce que les méthodes privées ne peuvent même pas être
vu par une sous-classe (sans parler hérité), ils ne peuvent pas être remplacés, afin qu'ils
ne peut pas être marquée abstrait.
OriginalL'auteur Sreedhar GS
En Java une instance d'une classe abstraite ne peut pas être créé, nous ne pouvons avoir les références de la classe abstraite type. Donc là, si nous faisons classe abstraite, finale alors nous ne seront pas en mesure de le prolonger.
résumé et final sont mutuellement exclusifs concept.
c'est pourquoi Java compilateur renvoie une erreur de compilation lorsque vous essayez de faire une classe abstraite final en Java
OriginalL'auteur Ankur08
En raison de certaines raisons, nous ne pouvons pas l'utilisation finale finale avec la classe abstraite.
1. Si l'on définit le résumé final puis on ne peut pas le prolonger.
2. Si nous définissons la classe abstraite comme définitive la il donnera l'erreur de compilation..
OriginalL'auteur Anil Chaurasiya