2012-02-26 14 views
7

Actualmente estoy en el proceso de desarrollar un mecanismo de generación de caracteres para un juego de texto basado en Java, pero me encontré con un problema y no puedo ver dónde me he equivocado. Tengo una clase de "Personaje", que es abstracta y luego otra clase, "NPCharacter", que significa construir sobre esto.Java abstract/extends issue

public abstract class Character { 
    public abstract void generateStats(); 
} 

public class NPCharacter extends Character { 
    public void generateStats() { 

    } 
} 

Eclipse dice que "El tipo NPCharacter no puede subclase el carácter de clase final". ¿Alguien puede ver el error aquí?

Gracias de antemano.

Respuesta

8

El compilador está confundiendo su Character con java.lang.Character. Solo use un paquete y asegúrese de importar suCharacter.

package com.foo; 

public abstract class Character { 
    public abstract void generateStats(); 
} 

y

import com.foo.Character; 

public class NPCharacter extends Character { 
    public void generateStats() { 

    } 
} 
1

Character es una clase estándar en el paquete java.lang, que se importa automáticamente en todas las clases. Elige otro nombre para tu clase personalizada.

0

Por favor, compruebe que las importaciones. Parece que NPCharacter intenta extender otra clase llamada Character (tal vez una de la biblioteca estándar, que de hecho puede ser final).

Preferible se refieren a la clase de caracteres por su nombre completo, es decir, {nombre del paquete} .Character

2

El problema es que Character es una clase del paquete java.lang, y no se puede extendido porque es final. Debe cambiar el nombre de su clase Character y/o verificar sus declaraciones de importación: tiene una colisión de nombre.

2

El compilador dice que no se puede extender la clase java.lang.Character, que es una clase final que no se puede subclasificar. (Las clases del paquete java.lang se importan implícitamente en todos los archivos fuente de Java.)

Aunque la clase NPCharacter tiene la intención de extender la clase abstracta Character, el compilador no puede distinguir entre los dos.

Deberá utilizar el nombre de clase totalmente calificado de la clase abstracta Character, o si eso no es posible (debido a que no pertenece a ningún paquete), no tendrá más opción que cambiar el nombre del Character clase abstracta.

Pero mejor aún, cambiar el nombre de Character clase abstracta a algo que no entre en conflicto con el nombre de una clase en el paquete java.lang, ya que esto puede causar confusión a la gente que lee el código.

0

Tu código se ve bien. ¿Estás seguro de que tu clase NPCharacter realmente intenta extender la clase de caracteres correcta, y no una diferente (de un paquete diferente) como, por ejemplo, java.lang.Character?