Pourquoi une classe finale ne peut pas être héréditaire, mais une méthode finale peut être héréditaire?
J'ai une grande confusion dans l'utilisation de la "finale" du mot-clé entre les classes et les méthodes
j'.e.pourquoi finale des méthodes de soutien héritage, mais pas en dernier classes
final class A{
void print(){System.out.println("hello world");}
}
class Final extends A{
public static void main(String[] args){
System.out.println("hello world");
}
}
ERREUR:
ne peut pas hériter d'Une Finale
la classe Finale extennds Un{
MÉTHODE FINALE EST..
class Bike{
final void run(){System.out.println("run");}
}
class Honda extends Bike{
public static void main(String[] args){
Honda h=new Honda();
h.run();
}
}
final
signifie, que vous ne pouvez pas "surcharger" il. Dans une classe, vous "écraser" avec l'héritage (deux objets différents avec le même type). Dans le contexte de la méthode que vous avez juste une nouvelle méthode avec le même nom et les paramètres (la signature). Dans la variable contexte, il est la valeur ou par référence.- essayez de
@Override
la dernière méthode dans une classe enfant, vous verrez une très similaires message d'erreur... - Double Possible de Java "finale" de la méthode: est-ce une promesse?
Vous devez vous connecter pour publier un commentaire.
Pourquoi? Parce que
final
signifie différentes choses pour les classes et les méthodes.Pourquoi est-il signifier différentes choses? Parce que c'est la façon dont le langage Java, les concepteurs ont choisi pour la conception de la langue!
Il y a trois significations distinctes pour la
final
mot-clé dans Java.Un
final
classe ne peut pas être prolongé.Un
final
méthode ne peut pas être remplacée.Un
final
variable ne peut pas être attribué après qu'il a été initialisé.Pourquoi ont-ils décidé d'utiliser
final
à avoir des significations différentes dans des contextes différents? Sans doute parce qu'ils n'ont pas besoin de réserver 2 ou 3 mots clés distincts. (Avec le recul, ce qui n'aurait pas été la meilleure décision. Cependant, cela est discutable ... et de débattre c'est probablement une perte de temps.)Il est intéressant de noter que d'autres mots-clés ont plusieurs significations en Java; par exemple,
static
etdefault
(Java 8).Méthode finale de l'héritage de ne permettre l'accès à la finale de la méthode dans la classe enfant, mais primordial n'est pas autorisé.