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

Вот мой код:

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 all, но ONCE. Что дает?

Ответ 1

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

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


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

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

Ответ 2

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

package player;
import characters.Character

public class Player extends Character {

}

Ответ 3

В этом случае я настоятельно рекомендую использовать полное имя класса 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).

Ответ 4

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

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

так что это не может быть подклассом.

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