ここに私のコードがあります:
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
をプロジェクトで一度しか使用していません。何が得られますか?
Java.lang.Character
を拡張しています(Java.lang
からのインポートなので、インポートは不要です)。
import characters.Character
をPlayer
コードに挿入します。
参照: パッケージメンバーを使用 :
便宜上、Javaコンパイラは、ソースファイルごとに2つのパッケージ全体を自動的にインポートします。(1)Java.langパッケージと(2)現在のパッケージ(現在のファイルのパッケージ)。
文字はJava.langのクラス(「char」のラッパークラス)です。プレイヤークラスのキャラクターをインポートする必要があります
package player;
import characters.Character
public class Player extends Character {
}
この場合、 Character
句 のextends
クラスの 完全修飾名 を使用することを強くお勧めします。
public class Player extends characters.Character {}
経験豊富なJava開発者は Java.lang.Character
が final
であり、それによって拡張できないことを知っています。 class Player extends Character
を書くことで、おそらくそれらをプラスにしないでしょう。
すべてのコンパイル単位暗黙的にインポート定義済みパッケージ
Java.lang
で宣言されたすべてのパブリック型名。宣言import Java.lang.*;
がパッケージ宣言の直後に各コンパイル単位の先頭に出現したかのように。その結果、これらすべてのタイプの名前は、すべてのコンパイル単位で単純名として使用できます。
もちろん、標準のJava.lang
パッケージのクラスと衝突しない名前(Person
やGameCharacter
など)を選択する方が合理的です。
文字は最終クラスです Java Docsで定義されているとおり:
public final class Character
extends Object
implements Serializable, Comparable<Character>
そのため、サブクラス化することはできません。
暗黙的にインポートされているこのCharacterクラスからエラーが発生しています。 注意してください!。