我目前正在为基于Java的文本游戏开发角色生成机制,但我遇到了一个问题,无法看到我可能出错的地方。我有一个“Character”类,它是抽象的,然后是另一个类,“NPCharacter”,意思是建立在此之上。
public abstract class Character {
public abstract void generateStats();
}
public class NPCharacter extends Character {
public void generateStats() {
}
}
Eclipse说“类型NPCharacter不能继承最终的类字符”。谁能在这里看到错误?
提前致谢。
答案 0 :(得分:8)
编译器会使您的Character
与java.lang.Character
混淆。只需使用套餐,并确保导入您的 Character
。
package com.foo;
public abstract class Character {
public abstract void generateStats();
}
和
import com.foo.Character;
public class NPCharacter extends Character {
public void generateStats() {
}
}
答案 1 :(得分:2)
问题是Character
是java.lang
包中的一个类,你不能扩展它,因为它是最终的。您应该重命名Character
类和/或检查导入语句:您有名称冲突。
答案 2 :(得分:2)
编译器说你不能扩展java.lang.Character
类,这是一个不能被子类化的final
类。 (java.lang
包中的类被隐式导入到所有Java源文件中。)
虽然NPCharacter
类打算扩展Character
抽象类,但编译器无法区分这两者。
你必须使用Character
抽象类的完全限定类名,或者如果不可能(因为它不属于任何包),你将不会有任何选择。重命名Character
抽象类。
但更好的是,将您的Character
抽象类重命名为与java.lang
包中的类名称不冲突的内容,因为这可能会导致阅读代码。强>
答案 3 :(得分:1)
Character是java.lang
包中的标准类,可在每个类中自动导入。为您的自定义类选择另一个名称。
答案 4 :(得分:0)
请检查你的进口情况。听起来NPCharacter试图扩展另一个名为Character的类(可能是标准库中的一个,它确实可以是最终的)。
优先使用您的全名来命名您的Character类,即{package name} .Character
答案 5 :(得分:0)
您的代码看起来不错。你确定你的NPCharacter类真的试图扩展正确的Character类,而不是一个不同的类(来自不同的包),例如java.lang.Character中?