2012-02-26 10 views
7

現在、Javaベースのテキストゲーム用のキャラクター生成メカニズムを開発中ですが、問題が発生してどこが間違っているのかわかりません。私は抽象クラスである "Character"クラスを持っていて、別のクラスである "NPCharacter"はこれの上に構築されています。Javaの抽象的/拡張問題

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

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

    } 
} 

Eclipseには、「タイプNPCharacterは最終クラスの文字をサブクラス化できません」と表示されます。誰もがここでエラーを見ることができますか?

ありがとうございます。

答えて

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

Characterは、すべてのクラスで自動インポートされるjava.langパッケージの標準クラスです。カスタムクラスの別の名前を選択します。

0

あなたの輸入を確認してください。 NPCharacterがCharacterという名前の別のクラスを拡張しようとしているようです(おそらく、最終的には標準ライブラリであるかもしれません)。

好ましいのは、問題がCharacterjava.langパッケージ内のクラスであり、それが最終的なので、あなたがそれを拡張することができないということである、すなわち、{パッケージ名} .Character

2

、そのフルネームであなたの文字クラスを参照してください。 Characterクラスの名前を変更するか、インポートステートメントを確認する必要があります。名前の衝突があります。

2

java.lang.Characterクラス(サブクラス化できないfinalクラス)を拡張することはできません。

NPCharacterクラスは、抽象クラスCharacterを拡張しようとしていますが、コンパイラはこの2つのクラスを区別できません。

Character抽象クラスの完全修飾クラス名を使用する必要があります。そうでない場合(パッケージに属していないため)、Characterの名前を変更する以外の選択はできません抽象クラス。それはあなたのコードを読んで人々に混乱を引き起こす可能性がありますよう

しかし、いっそのこと、は、java.langパッケージ内のクラスの名前と競合しないものにあなたのCharacter抽象クラスの名前を変更します。

0

あなたのコードはOKです。あなたのNPCharacterクラスが本当に正しいCharacterクラスを拡張しようとしているのですか?そうではありません。 java.lang.Character?

関連する問題