2012-05-13 10 views

Respuesta

13

La sobrecarga y la anulación son cosas complementarias, la sobrecarga significa el mismo nombre de método pero diferentes parámetros, y anulación significa el mismo nombre de método en una subclase con los mismos parámetros. Por lo tanto, no es posible sobrecargar y sobreescribir al mismo tiempo porque la sobrecarga implica diferentes parámetros.

Ejemplos:

class A { 
    public void doSth() { /// } 
} 

class B extends A { 
    public void doSth() { /* method overriden */ } 

    public void doSth(String b) { /* method overloaded */ } 

} 

Saludos!

+5

Si lo desea, puede anular un método sobrecargado. Es lo más cercano que puede llegar. – user845279

+0

Cuando esto sucede, ¿cuál es el responsable del enlace (en términos estáticos o dinámicos) del método, entonces? ¿Anulación o sobrecarga? – zgulser

5

sobrecarga y sobrecarga son solo abstracciones. La sobrecarga solo significa que el compilador usa el nombre junto con los tipos y la cantidad de parámetros para direccionar a qué función llamar. En realidad, la sobrecarga de un método no es diferente de nombrarlo de otra manera porque la clave que usa el compilador para buscar la función es una combinación de nombre y lista de parámetros.

Reemplazar es una especie de principio similar, excepto que el compilador puede abordar la función reemplazada con la palabra clave super.

¿Puede anular una función sobrecargada? Sí, ya que el método sobrecargado es un método completamente diferente a los ojos del compilador.

+0

Reemplazar no es lo mismo en absoluto. La decisión sobre qué método llamar se difiere al tiempo de ejecución. El compilador no lo decide. – EJP

+0

¡Gracias, es útil! –

+0

@EJP - En última instancia, el compilador toma la decisión, incluso si se abstrae mediante la construcción de un vtables y la asignación de vipinters para facilitar el despacho dinámico. Los lazos que se unen tienen que ser inicializados en alguna parte. – nsfyn55

1

Depende de lo que usted diga. Un método puede ser una anulación de un método sobrecargado en una superclase. Y puede sobrecargar un método que está anulando simultáneamente utilizando otro método.

Sin embargo, no puede tener un método que sea tanto una nueva sobrecarga y una anulación. Para que un método sea una anulación, otro método con la misma firma ya debe existir en la superclase ... y eso significa que este método no puede ser nuevo anular.

Cuestiones relacionadas