Peut une méthode dans la classe sous la surcharge d'une méthode dans la classe super?
De code Java:
class P {
public void hello() {}
}
class C extends P {
public void hello(String s) {}
}
Ma question est: Est ce que le hello
dans la classe C
la surcharge de l'un avec le même nom dans la classe super P
?
Mon ami me dit qu'ils ne sont pas parce que les sont pas dans la même classe.
- Êtes-vous demander à propos de la surcharge ou de la transgression?
- Votre ami est incorrect
- Même question, même réponse ici: stackoverflow.com/questions/15291400/...
- En supposant par "surcharge" vous fait dire "substitution", votre ami a raison. Il n'est pas primordial. Bien qu'il y EST de "surcharge". Classe
C
a deuxhello()
ethello(String s)
méthodes.
Vous devez vous connecter pour publier un commentaire.
De prendre une approche plus formelle, le Langage Java Specification for Java 7 états:
http://docs.oracle.com/javase/specs/jls/se7/html/jls-8.html#jls-8.4.9
Je tiens à souligner votre ami à ce lien.
Donc, en bref, dans votre exemple, le bonjour méthode est surchargée.
Explication Simple:
Je pense que cette question se pose parce que à la fois, nous entendons la suite,
"Surcharge de la méthode est réalisée à l'intérieur de la classe.
La redéfinition de méthode se déroule en deux classes qui ont une relation d'héritage."
La déclaration ci-dessus est correcte. Mais votre ami est faux. pourquoi?
Parce que quand vous étendez une classe, la sous-classe ont toutes les méthodes définies par la super-classe. C'est comme si toutes les méthodes de la super-classe ont été mis en œuvre par la sous-classe. Cela signifie que le hello() la méthode a été implémentée par la classe C ainsi. Maintenant, vous avez ajouté une méthode dans la classe C avec des paramètres différents (bonjour(String s)). Cela signifie que, de classe C dispose de deux méthodes dans toutes avec le même nom, mais de différents paramètres et qui est "surcharge".
Espère que c'est clair comme du cristal.
Oui, votre ami est mauvais parce qu'il ne pense qu'à la notion de primordial.
Mais ici
hello()
, ethello(String s)
sont différents par là paramètres c'est donc une surcharge pas primordial.Yes it is overloading
, Cette surcharge qui se passe dans le cas de la classeC
", qui est l'extension deP
et donc avoirtwo methods with the same nam
e maisdifferent parameters
conduisant à une surcharge de la méthodehello()
dansClass C
. CependantClass P
est seulement en mesure d'accéder à l'une des méthodes qui est présent dans sa propre définition.Longue histoire courte, une instance de
C
aurez à la fois lehello()
et lahello(String s)
méthodes disponibles. Une instance deP
, seules leshello
méthode disponible.C'est en effet surcharge, comme vous l'avez deux méthodes de même nom en prenant différents paramètres.
Cependant, il n'est pas primordial, en raison primordiale est d'avoir une méthode déclarée dans une sous-classe avec le même nom et les mêmes paramètres comme une méthode dans une super-classe.
E. g. si vous aviez
il serait primordial la
hello()
méthode déclarée dansP
. Lors de l'invocation denew C().hello()
dans ce cas, vous devez appeler la mise en œuvre de lahello()
méthode déclarée dans la classeC
.Surcharge peut se produire dans la même classe ainsi que les parent-enfant, relation de classe alors que primordial ne se produit que dans une relation d'héritage.
C'est une question valable, car, généralement, la surcharge est expliqué à l'aide de deux méthodes avec le même nom (mais différents paramètres) dans la même classe.
Je dirais que oui, la méthode
hello
dansC
surchargeP
'shello
méthode en raison de la "une" de la relation.L' "est un" rapport indique que, depuis C sous-classes P, il est aussi une instance de P ("C est un P"). Donc C a 2 surchargé
hello
-méthodes.Bonne question!!!En classe de sous si le nom de la méthode | type de paramètre | liste est modifiée alors sous méthode de classe ne sera pas considéré comme primordial, il est considéré comme la surcharge de méthode
Exemple :
Dans le programme ci-dessus m1 méthode est une méthode surchargée.
Oui, nous pouvons surcharge de la super-classe de la méthode dans la sous-classe comme ci-dessous:
Source de confusion: Votre ami aurait droit si parler de C++ pas de Java. En C++, la fonction de surcharge ne peut se produire entre les membres de la même classe. Alors qu'en Java, une surcharge peut se produire, en outre, à travers deux classes avec une relation d'héritage.
Surcharge, c'est quand vous avez deux méthodes qui ont le même nom mais des signatures différentes (Votre cas).
note de Côté: Primordial, c'est quand vous avez deux méthodes qui ont exactement la même signature et le nom et la classe mère.