Título: ¿Porqué una clase no puede ser abstract y final simultáneamente? Publicado por: theluigy13etv en 21 Octubre 2012, 04:32 am Hola, me surgió esta curiosidad cuando estaba mezclando los distintos tipos de modificadores que existen en Java y en un momento en que declaré una clase como abstract y final el compilador me marcaba un error. Yo sé que el modificador abstract permite que una clase no pueda ser instanciada y que el modificador final hace que una clase no pueda ser extendida, es decir, no pueda tener clases hijas. Pero no sé la razón por la cual no puede ser ambas a la vez? :rolleyes:
Título: Re: ¿Porqué una clase no puede ser abstract y final simultáneamente? Publicado por: sapito169 en 21 Octubre 2012, 04:42 am cielos discúlpame que sea troll pero si james goslin leyera tu post se tiraría de una ventana
mira abstract sirve para forsar a que tengas que heredar de esa clase . y final sirve para que no puedas herdar la clase :o Título: Re: ¿Porqué una clase no puede ser abstract y final simultáneamente? Publicado por: Gallu en 21 Octubre 2012, 17:28 pm Yo me tiraría de una ventana también por tus faltas ortográficas sapito .
Título: Re: ¿Porqué una clase no puede ser abstract y final simultáneamente? Publicado por: theluigy13etv en 22 Octubre 2012, 04:32 am cielos discúlpame que sea troll pero si james goslin leyera tu post se tiraría de una ventana mira abstract sirve para forsar a que tengas que heredar de esa clase . y final sirve para que no puedas herdar la clase :o Si eso ya lo sé (por algo lo mencioné, yo sé para que sirve cada modificador). Pero yo tengo un ejemplo en el que no necesito hacer ninguna de ambas. En el caso en el que una clase tenga el método main, osea un java main class, este no necesita instanciarse (abstract) y tampoco necesita heredarse (final). Creo que el hecho que una clase sea abstract no necesariamente obliga (en TODOS los casos) a que la clase sea heredada, claro que sería lo más conveniente (en programas "grandes") y lo más ventajoso, pero yo tranquilamente puedo tener un java main class como el siguiente ejemplo en el que no se cumple lo que dices: Citar abstract sirve para forsar a que tengas que heredar de esa clase :Código: public abstract class luis { Código: public final class luis { Pero no me permite esto: Código: public abstract final class luis { Título: Re: ¿Porqué una clase no puede ser abstract y final simultáneamente? Publicado por: Gallu en 22 Octubre 2012, 22:19 pm Supongo que el compilador por definición ve como imcompatibles ambos modificadores. En todo caso , como pregunta curiosa esta bien, pero si no tienes ningún método sin implementación, ¿ para qué declarar a la clase como abstract ?
Y por cierto Citar abstract sirve para forsar a que tengas que heredar de esa clase esto no es correcto , el modificador no obliga a una clase a que herede de esta , sino a que IMPLEMENTE (que no es lo mismo que obligar a heredar) sus métodos, si no lo hace, la subclase también debe ser declarada con el modificador abstract .Saludos Título: Re: ¿Porqué una clase no puede ser abstract y final simultáneamente? Publicado por: theluigy13etv en 23 Octubre 2012, 20:31 pm Hola, muchas gracias por tu respuesta. Te respondo esta pregunta ;)
¿ para qué declarar a la clase como abstract ? En mi caso declaro mi clase como abstract para evitar que algún gracioso la instancie, como en este caso: Declarando la clase sin abstract Código: public class Luis { Instanciando la clase anterior Código: public class TLuis { Título: Re: ¿Porqué una clase no puede ser abstract y final simultáneamente? Publicado por: Gallu en 24 Octubre 2012, 21:24 pm Yo si quisiera evitar que alguien instancie una clase mía , simplemente haría esto :
Código
Creo que es mejor que declarar la clase como abstract, que dices ? Saludos Título: Re: ¿Porqué una clase no puede ser abstract y final simultáneamente? Publicado por: theluigy13etv en 25 Octubre 2012, 00:49 am Creo que es mejor que declarar la clase como abstract, que dices ? Saludos Sí muchas gracias, esa era mi segunda opción, la de darle un constructor private. Entonces me queda claro que no puedo usar abstract y final simultáneamente, y como dices, para lograr lo que pido lo único que podría hacer es declarar la clase como final (para que no pueda ser heredada) y con un constructor private (para que no pueda ser instanciada). Quería darle abstract porque al darle el modificador ese modificador como que siento que estoy convirtiendo a esa clase como una clase fantasma :silbar: o algo así, bueno yo me entiendo. Gracias por sus respuestas ;-). |