Javaで定義済みクラス名をクラス名や変数名として使う方法
Javaでは、NumberやStringなど、あらかじめ標準ライブラリに用意されている(事前定義された)クラスと同じ名前を、独自のクラス名や変数名として使用することが可能です。ただし、いくつか注意すべきポイントがあります。ここでは、具体的なコード例を挙げながら詳しく解説します。
定義済みクラス名をクラス名として使用する
まず、定義済みクラス名をそのままクラス名として使う例を見てみましょう。
コード例
public class Number {
public static void main(String[] args) {
System.out.println("Pre-defined class name can be used as a class name");
}
}
出力結果
Pre-defined class name can be used as a class name
この例では、JDKに標準で含まれる抽象クラス java.lang.Number と同名の Number クラスを独自に定義しています。クラス内にはmainメソッドがあり、実行するとコンソールにメッセージが表示されます。mainメソッドは、文字列配列(String[]型)を引数として受け取るのが一般的な形式です。
このように、既存のクラス名と同じ名前のクラスを定義しても、コンパイルエラーにはなりません。ただし、同名のクラスが存在することでコードの意味が分かりにくくなり、混乱を招く可能性があるため、実際の開発では避けるのが無難です。
定義済みクラス名を変数名として使用する
次に、定義済みクラス名を変数名として使用する例を見てみましょう。
コード例
public class String {
public static void main(java.lang.String[] args) {
System.out.println("Pre-defined class name can be used as a variable");
}
}
出力結果
Pre-defined class name can be used as a variable
この例では、標準ライブラリの java.lang.String クラスと同名の String クラスを独自に定義しています。ここで重要なのは、mainメソッドの引数の書き方です。通常は String[] args と記述しますが、この場合「String」は自作したクラスを指してしまうため、完全修飾名である java.lang.String[] args と明示的に指定する必要があります。
もし String[] args のまま記述すると、名前解決の際に自作のStringクラスが優先され、正しいmainメソッドのシグネチャと一致しなくなります。その結果、プログラムのエントリーポイントとして認識されず、実行時にエラーが発生してしまいます。
まとめ
Javaの言語仕様上、定義済みクラス名をクラス名や変数名として再利用することは許されています。しかし、標準クラスを意図せず隠蔽(シャドウイング)してしまうため、予期しない動作やエラーの原因になりかねません。可読性と保守性の観点からも、実際の開発では定義済みクラス名との重複は避けることをおすすめします。
-
Javaのfinalクラスとは?継承を禁止する仕組みと使い方を徹底解説
Javaにおいて、クラスにfinal修飾子を付けて宣言する最大の目的は、そのクラスがサブクラス化(継承)されることを防ぐことです。クラスがfinalとして宣言されると、どのクラスもそのクラスを継承できなくなり、finalクラスの機能や振る舞いを拡張・変更することが不可能になります。finalクラスの基本構文finalクラスの宣言は非常にシンプルです。クラス名の前にfinalキーワードを付けるだけです。public final class Test { // クラスの本体 }このように宣言されたTestクラスに対して、以下のような継承を試みるとコンパイルエラーが発生します。// コンパイ
-
Javaのfinal変数とは?使い方と定数宣言の基本を解説
Javaにおけるfinal変数は、明示的な初期化を一度しか行えない変数です。一度値を代入すると、その後は再代入することができません。 また、参照型変数にfinalを付けた場合、その参照先のオブジェクトを別のオブジェクトに変更することはできません。ただし、オブジェクト内部のデータ(フィールドの値など)は変更可能です。つまり、オブジェクトの状態は変更できるが、参照自体は変更できないという点に注意が必要です。 final修飾子とstaticの組み合わせ 変数に対してfinal修飾子を使用する場合、多くの場面でstaticキーワードと組み合わせて使われます。これにより、定数がクラス変数(クラス全体で共