这是我的代码:
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
。有什么作用?
答案 0 :(得分:94)
您要扩展java.lang.Character
(它不需要导入,因为它来自java.lang
)。
将import characters.Character
插入您的Player
代码中。
为方便起见,Java编译器会为每个源文件自动导入两个完整的软件包:(1)java.lang软件包和(2)当前软件包(当前文件的软件包)。
答案 1 :(得分:17)
Character是java.lang的类(“ char”的包装类)。 您必须导入字符。Player类中的字符
package player;
import characters.Character
public class Player extends Character {
}
答案 2 :(得分:9)
在这种情况下,我强烈建议在the fully qualified name中使用Character
类的the extends
clause。
public class Player extends characters.Character {}
经验丰富的Java开发人员知道java.lang.Character
是final
,因此无法扩展。通过编写class Player extends Character
,您可能会使它们变得多余。
每个编译单元隐式导入在预定义包
java.lang
中声明的每个公共类型名称,就像声明import java.lang.*;
出现在每个编译单元的紧随其后一样。包声明。结果,所有这些类型的名称在每个编译单元中都以简单名称的形式提供。Java 11 Specification > 7. Packages and Modules > 7.3. Compilation Units
当然,从标准java.lang
包(例如Person
或GameCharacter
)中选择不与类冲突的名称会更合理。 / p>
答案 3 :(得分:7)
字符是Java文档中定义的最终课程:
public final class Character
extends Object
implements Serializable, Comparable<Character>
所以它不能被子类化。
您正在从隐式导入的Character类中出错。 当心!。