Java аннотация / расширяет выпуск - PullRequest
7 голосов
/ 26 февраля 2012

Я сейчас нахожусь в процессе разработки механизма генерации персонажей для текстовой игры на основе Java, но я столкнулся с проблемой и не могу понять, где я мог ошибиться.У меня есть класс "Character", который является абстрактным, а затем другой класс, "NPCharacter", который предназначен для построения поверх него.

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

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

    }
} 

Eclipse говорит, что "Тип NPCharacter не может создавать подклассы в конечном классе».Кто-нибудь может увидеть ошибку здесь?

Заранее спасибо.

Ответы [ 6 ]

8 голосов
/ 26 февраля 2012

Компилятор путает ваш Character с java.lang.Character. Просто используйте пакет и убедитесь, что вы импортируете ваш Character.

package com.foo;

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

и

import com.foo.Character;

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

    }
}
2 голосов
/ 26 февраля 2012

Компилятор говорит, что вы не можете расширять класс java.lang.Character, который является классом final, который нельзя разделить на подклассы.(Классы в пакете java.lang неявно импортируются во все исходные файлы Java.)

Хотя класс NPCharacter намеревается расширить абстрактный класс Character, компилятор не может различитьдва.

Вы должны будете использовать полное имя класса абстрактного класса Character, или, если это невозможно (из-за того, что он не принадлежит ни к какому пакету), у вас не будет никакогокроме как переименование абстрактного класса Character.

Но еще лучше, переименование вашего абстрактного класса Character во что-то, что не противоречит имени класса в пакете java.lang, поскольку это может вызвать путаницу у людей, читающих ваш код.

2 голосов
/ 26 февраля 2012

Проблема в том, что Character является классом в пакете java.lang, и вы не можете расширить его, потому что он финальный.Вам следует переименовать свой класс Character и / или проверить операторы импорта: у вас есть конфликт имен.

1 голос
/ 26 февраля 2012

Символ - это стандартный класс в пакете java.lang, который автоматически импортируется в каждый класс. Выберите другое имя для своего пользовательского класса.

0 голосов
/ 26 февраля 2012

Ваш код выглядит нормально. Вы уверены, что ваш класс NPCharacter действительно пытается расширить правильный класс символов, а не другой (из другого пакета), например, например, java.lang.Character

0 голосов
/ 26 февраля 2012

Пожалуйста, проверьте ваш импорт.Похоже, NPCharacter пытается расширить другой класс с именем Character (возможно, один из стандартной библиотеки, который действительно может быть окончательным).

Предпочтительно ссылаться на ваш класс Character по его полному имени, то есть {имя пакета}.Характер

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...