Java摘要/扩展问题

时间:2012-02-26 15:44:32

标签: java eclipse oop

我目前正在为基于Java的文本游戏开发角色生成机制,但我遇到了一个问题,无法看到我可能出错的地方。我有一个“Character”类,它是抽象的,然后是另一个类,“NPCharacter”,意思是建立在此之上。

public abstract class Character {
    public abstract void generateStats();
}

public class NPCharacter extends Character {
    public void generateStats() {

    }
} 

Eclipse说“类型NPCharacter不能继承最终的类字符”。谁能在这里看到错误?

提前致谢。

6 个答案:

答案 0 :(得分:8)

编译器会使您的Characterjava.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)

问题是Characterjava.lang包中的一个类,你不能扩展它,因为它是最终的。您应该重命名Character类和/或检查导入语句:您有名称冲突。

答案 2 :(得分:2)

编译器说你不能扩展java.lang.Character类,这是一个不能被子类化的final类。 (java.lang包中的类被隐式导入到所有Java源文件中。)

虽然NPCharacter类打算扩展Character抽象类,但编译器无法区分这两者。

你必须使用Character抽象类的完全限定类名,或者如果不可能(因为它不属于任何包),你将不会有任何选择。重命名Character抽象类。

但更好的是,将您的Character抽象类重命名为与java.lang包中的类名称不冲突的内容,因为这可能会导致阅读代码。

答案 3 :(得分:1)

Characterjava.lang包中的标准类,可在每个类中自动导入。为您的自定义类选择另一个名称。

答案 4 :(得分:0)

请检查你的进口情况。听起来NPCharacter试图扩展另一个名为Character的类(可能是标准库中的一个,它确实可以是最终的)。

优先使用您的全名来命名您的Character类,即{package name} .Character

答案 5 :(得分:0)

您的代码看起来不错。你确定你的NPCharacter类真的试图扩展正确的Character类,而不是一个不同的类(来自不同的包),例如java.lang.Character中?