“无法将最终课程归类”错误,但该课程不是最终课程

时间:2018-12-14 12:27:06

标签: java inheritance package final-class

这是我的代码:

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 个答案:

答案 0 :(得分:94)

您要扩展java.lang.Character(它不需要导入,因为它来自java.lang)。

import characters.Character插入您的Player代码中。


参考:using package members

  

为方便起见,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.Characterfinal,因此无法扩展。通过编写class Player extends Character,您可能会使它们变得多余。

  

每个编译单元隐式导入在预定义包java.lang中声明的每个公共类型名称,就像声明import java.lang.*;出现在每个编译单元的紧随其后一样。包声明。结果,所有这些类型的名称在每个编译单元中都以简单名称的形式提供。

     

Java 11 Specification > 7. Packages and Modules > 7.3. Compilation Units

当然,从标准java.lang包(例如PersonGameCharacter)中选择不与类冲突的名称会更合理。 / p>

答案 3 :(得分:7)

字符是Java文档中定义的最终课程

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

所以它不能被子类化。

您正在从隐式导入的Character类中出错。 当心!