Ошибка "Не удается создать подкласс окончательного класса", но класс не является окончательным

Вот мой код:

package basic;

public abstract class Entity {}

package characters;

import basic.Entity;

public abstract class Character extends Entity {}

package player;

public class Player extends Character {}

Я получаю

Тип Player не может подкласс final class Character,

но я проверил миллион раз, и я еще не использовал final все, но только один раз в моем проекте. Что дает?

4 ответа

Решение

Вы расширяете java.lang.Character (который не нуждается в импорте, как это происходит из java.lang).

Вставить import characters.Character в ваш Player код.


Справка: с использованием пакетов:

Для удобства компилятор Java автоматически импортирует два целых пакета для каждого исходного файла: (1) пакет java.lang и (2) текущий пакет (пакет для текущего файла).

Character - это класс java.lang (класс-обертка char). Вы должны импортировать символы. Характер в вашем классе игрока

package player;
import characters.Character

public class Player extends Character {

}

В этом случае я настоятельно рекомендую использовать полное имя Character класс в extends оговорка

public class Player extends characters.Character {}

Опытные Java-разработчики знают, что java.lang.Characterявляетсяfinalи не может быть таким образом продлен. Письменноclass Player extends Character Вы, вероятно, сделаете их в замешательстве.

Каждый модуль компиляции неявно импортирует каждое публичное имя типа, объявленное в предопределенном пакетеjava.lang как будто декларацияimport java.lang.*;появляется в начале каждого модуля компиляции сразу после любого объявления пакета. В результате имена всех этих типов доступны как простые имена в каждой единице компиляции.

Спецификация Java 11> 7. Пакеты и модули> 7.3. Единицы Компиляции

Конечно, было бы разумнее подобрать имя, которое не совпадает с классами из стандарта java.lang пакет (как Person, или же GameCharacter).

Character - это последний класс, определенный в Java Docs:

public final class Character
extends Object
implements Serializable, Comparable<Character>

поэтому он не может быть подклассифицирован.

Вы получаете ошибку от этого класса Character, который неявно импортируется. Осторожно!,

Другие вопросы по тегам