Autor
|
Tema: ¿Porqué una clase no puede ser abstract y final simultáneamente? (Leído 5,569 veces)
|
theluigy13etv
Desconectado
Mensajes: 179
Primero se hace, después se mejora
|
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?
|
|
|
En línea
|
|
|
|
sapito169
Desconectado
Mensajes: 628
|
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
|
|
« Última modificación: 22 Octubre 2012, 02:10 am por sapito169 »
|
En línea
|
|
|
|
Gallu
Desconectado
Mensajes: 247
|
Yo me tiraría de una ventana también por tus faltas ortográficas sapito .
|
|
|
En línea
|
Nadie alcanza la meta con un solo intento, ni perfecciona la vida con una sola rectificación, ni alcanza altura con un solo vuelo.
|
|
|
theluigy13etv
Desconectado
Mensajes: 179
Primero se hace, después se mejora
|
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 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: abstract sirve para forsar a que tengas que heredar de esa clase : public abstract class luis { public static void main(String [] args) { System.out.println("Hola"); } }
public final class luis { public static void main(String [] args) { System.out.println("Hola"); } }
Pero no me permite esto: public abstract final class luis { public static void main(String [] args) { System.out.println("Hola"); } }
|
|
« Última modificación: 22 Octubre 2012, 16:14 pm por theluigy13etv »
|
En línea
|
|
|
|
Gallu
Desconectado
Mensajes: 247
|
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 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
|
|
|
En línea
|
Nadie alcanza la meta con un solo intento, ni perfecciona la vida con una sola rectificación, ni alcanza altura con un solo vuelo.
|
|
|
theluigy13etv
Desconectado
Mensajes: 179
Primero se hace, después se mejora
|
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 public class Luis { public static void main(String [] args) { System.out.println("Hola"); } } Instanciando la clase anterior public class TLuis { public static void main(String [] args) { Luis l = new Luis(); l.main(args); } }
|
|
|
En línea
|
|
|
|
Gallu
Desconectado
Mensajes: 247
|
Yo si quisiera evitar que alguien instancie una clase mía , simplemente haría esto : public final class Luis { // si declaramos el constructor como privado, NADIE podrá instanciar tu clase private Luis(){} public static void main (String [] args ) { } }
Creo que es mejor que declarar la clase como abstract, que dices ? Saludos
|
|
|
En línea
|
Nadie alcanza la meta con un solo intento, ni perfecciona la vida con una sola rectificación, ni alcanza altura con un solo vuelo.
|
|
|
theluigy13etv
Desconectado
Mensajes: 179
Primero se hace, después se mejora
|
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 o algo así, bueno yo me entiendo. Gracias por sus respuestas .
|
|
« Última modificación: 25 Octubre 2012, 00:56 am por theluigy13etv »
|
En línea
|
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
se puede dar herencia de una clase anidada a una clase normal.
Java
|
kev4142
|
0
|
3,296
|
7 Agosto 2009, 20:46 pm
por kev4142
|
|
|
¿un ordenador puede soportar simultaneamente SO a 64 bits y 32 bits??
Windows
|
Vjuan_
|
5
|
7,424
|
30 Septiembre 2012, 21:43 pm
por aklamath
|
|
|
sobrecarga de metodos, se puede aplicar en metodos abstract o interfaces?
Desarrollo Web
|
jhonatanAsm
|
0
|
2,970
|
16 Agosto 2011, 00:22 am
por jhonatanAsm
|
|
|
En Skype se puede transmitir video simultaneamente a dos personas?
Software
|
Aikanáro Anário
|
3
|
2,331
|
27 Noviembre 2012, 17:51 pm
por el-brujo
|
|
|
Se puede interactuar con una BD simultaneamente diferentes personas y a la vez?
« 1 2 »
Bases de Datos
|
digimikeh
|
10
|
4,517
|
7 Abril 2020, 17:07 pm
por digimikeh
|
|