elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Curso de javascript por TickTack


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  Java
| | | |-+  ¿Porqué una clase no puede ser abstract y final simultáneamente?
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: ¿Porqué una clase no puede ser abstract y final simultáneamente?  (Leído 5,542 veces)
theluigy13etv

Desconectado Desconectado

Mensajes: 179


Primero se hace, después se mejora


Ver Perfil
¿Porqué una clase no puede ser abstract y final simultáneamente?
« 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:


En línea

sapito169


Desconectado Desconectado

Mensajes: 628



Ver Perfil
Re: ¿Porqué una clase no puede ser abstract y final simultáneamente?
« Respuesta #1 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


« Última modificación: 22 Octubre 2012, 02:10 am por sapito169 » En línea

Gallu

Desconectado Desconectado

Mensajes: 247



Ver Perfil
Re: ¿Porqué una clase no puede ser abstract y final simultáneamente?
« Respuesta #2 en: 21 Octubre 2012, 17:28 pm »

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 Desconectado

Mensajes: 179


Primero se hace, después se mejora


Ver Perfil
Re: ¿Porqué una clase no puede ser abstract y final simultáneamente?
« Respuesta #3 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 {
    public static void main(String [] args) {
        System.out.println("Hola");
    }
}



Código:
public final class luis {
    public static void main(String [] args) {
        System.out.println("Hola");
    }
}

Pero no me permite esto:
Código:
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 Desconectado

Mensajes: 247



Ver Perfil
Re: ¿Porqué una clase no puede ser abstract y final simultáneamente?
« Respuesta #4 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

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 Desconectado

Mensajes: 179


Primero se hace, después se mejora


Ver Perfil
Re: ¿Porqué una clase no puede ser abstract y final simultáneamente?
« Respuesta #5 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 {
    public static void main(String [] args) {
        System.out.println("Hola");
    }
}

Instanciando la clase anterior
Código:
public class TLuis {
    public static void main(String [] args) {
        Luis l = new Luis();               
        l.main(args);
    }
}
En línea

Gallu

Desconectado Desconectado

Mensajes: 247



Ver Perfil
Re: ¿Porqué una clase no puede ser abstract y final simultáneamente?
« Respuesta #6 en: 24 Octubre 2012, 21:24 pm »

Yo si quisiera evitar que alguien instancie una clase mía , simplemente haría esto :
Código
  1. public final class Luis {
  2.    // si declaramos el constructor como privado, NADIE podrá instanciar tu clase
  3.    private Luis(){}
  4.  
  5.    public static void main(String [] args) {
  6.        System.out.println("Hola");
  7.    }
  8. }
  9.  

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 Desconectado

Mensajes: 179


Primero se hace, después se mejora


Ver Perfil
Re: ¿Porqué una clase no puede ser abstract y final simultáneamente?
« Respuesta #7 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  ;-).
« Última modificación: 25 Octubre 2012, 00:56 am por theluigy13etv » En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines