2009-08-29 15 views
5

¿Se puede utilizar la palabra clave final para un método?conceptos básicos de Java sobre la palabra clave final

+4

Mejor si puede hacer un "trabajo a domicilio" antes de hacer una pregunta. Preguntar está completamente bien. Sin objeciones de eso. Pero creo que deberíamos preguntar todo. Una búsqueda en Google dio esto como primer golpe. http://en.wikipedia.org/wiki/Final_%28Java%29#Final_methods –

Respuesta

19
Absolutamente

! La palabra clave final se puede aplicar a casi cualquier cosa, en cada caso significa "ya no puede cambiar esto".

Esto es lo que significa cuando se aplica a ...

una variable: Simplemente no se puede asignar a la variable un valor nuevo (transformándola así en una constante , por supuesto)

un método: no se puede volver a implementar (es decir, anular) este método en una subclase

una clase: no se puede definir una subclase

En cada caso, simplemente indicamos: una vez que se declara esta cosa, este es el último valor (o implementación) que jamás verá.

+0

debe agregar una subsección en su respuesta que diferencie entre el caso cuando la variable apunta a un tipo primitivo vs tipo de referencia. ¿Tiene esto sentido? Luego eliminaré el -1 que te di. – Inquisitive

+1

Aquí no hay distinción entre los tipos primitivos y de referencia. Supongo que está aludiendo al hecho de que los tipos de referencia pueden no ser inmutables, incluso si una variable que apunta a uno es 'final'. Si es así, eso queda fuera del alcance de la pregunta original. Sin embargo, le invitamos a que haga comentarios constructivos de la manera que crea que mejorará las respuestas existentes. Como esta respuesta tiene varios años y solo se ha visto 528 veces hasta la fecha, recomiendo centrar sus esfuerzos en las preguntas más actuales. – VoteyDisciple

+0

su respuesta es engañosa para decir lo menos. Puede haber sido visto por n número de personas m veces, pero aún así es engañoso. La inmutabilidad toma una parte importante en el diseño de la clase. Así que definitivamente debería haber sido mencionado. – Inquisitive

2

Sí.

Usted puede hacer que un método final

public class A { 
    public static final void f() { 
     System.out.println("test"); 
    } 
} 

En general, existen dos razones para hacer un método final

  1. Cuando un método es final, que "puede" ser inline.
  2. Cuando un método es final, el método es imposible de reemplazar.
+5

Un caso más realista es un método final NO estático, ¿no? –

1

Sure can. Por lo que es imposible anular.

0

Claro, echa un vistazo a The Final Word on the Final Keyword

public abstract class AbstractBase 
{ 
    public final void performOperation() // cannot be overridden 
    { 
     prepareForOperation(); 
     doPerformOperation(); 
    } 

    protected abstract void doPerformOperation(); // must override 
} 
3

Sí, es posible declarar un método como final. Eso significa que un método no puede ser anulado por sus subclases.

De The Java Language Specifications, Third Edition, Section 8.4.3.3:

Un método puede ser declarado final para evitar que las subclases sustituyan o ocultarlo. Es un error en tiempo de compilación para intentar anular u ocultar un último método .

Para obtener más información, la página Writing Final Classes and Methods de The Java Tutorials tiene más información.

0

Sí.

Un método final no puede ser anulado por subclases. Esto se usa a menudo para evitar que las subclases alteren comportamientos cruciales de la clase.

0

Como nota a las otras respuestas. Usted puede use final. En la práctica, rara vez veo gente usándola y no estoy seguro de por qué.

Mucho del código que escribo en estos días está destinado a entornos de subprocesos múltiples y tiendo a hacer que la clase final sea inmutable (si es una clase de valor) para que sea segura para hilos.

El problema con marcar algunos métodos como definitivos (y no como otros) es que está diciendo que hay algo especial en ese método y nada especial en los demás. Eso rara vez es lo que la gente realmente quiere decir en mi experiencia.

Si una clase está destinada a la herencia, debe mantenerla limpia y mantenerla pequeña para evitar efectos secundarios no deseados. Todo esto depende de si está escribiendo código para usted y su equipo o si está escribiendo para un público más amplio, es decir, una aplicación pública de un proyecto de código abierto o un proyecto comercial.

0

palabra clave final utilizan, sobre todo para restringir el user..Final puede ser 1) Variables 2) Métodos 3) Clase
Si haces última variable valor, entonces no se puede cambiar de la misma (que actúa como una constante) ..
Si hace que el método sea definitivo, puede usarlo (utilizando el concepto de herencia) pero no puede anularlo ...
último si hace la clase final, entonces no puede extenderlo ... Hay tanto sobre la palabra clave final en la visita de Java: http://javabyroopam.blogspot.com

0

sí, la palabra clave final se puede utilizar para un método. Preservará la inmutabilidad. evita que se rompan los métodos. Por ejemplo, supongamos que la implementación de algún método de la clase X supone que el método M se comportará de cierta manera. Declarar X o M como final impedirá que las clases derivadas redefinan M de tal manera que X se comporte incorrectamente.

Cuestiones relacionadas