Ошибка "Не удается создать подкласс окончательного класса", но класс не является окончательным
Вот мой код:
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, который неявно импортируется. Осторожно!,