
こんな方におすすめ
- プログラミング初心者の方
- Javaを勉強中の方
自分の学習記録として記事に残していきます!
プログラミングを学習している方、一緒にレベルアップしていきましょう!
✔記事の信頼性
- 元プログラミングスクール講師で100人以上の生徒を担当
- Java Silverの資格取得
- 現役エンジニア
パッケージの名前空間

ss
パッケージを使わないと、同じクラス名が使えない
Javaでは「同じクラス名は使えない」というルールがあります。
サンプルコードで見てみます。
◎フォルダ構成
src/
greetings/
english/
Morning.java
french/
Morning.java
spanish/
Morning.java
Main.java
◎サンプルコード
// src/greetings/english/Morning.java
public class Morning {
public String morning() {
return "Good morning";
}
}
// src/greetings/french/Morning.java
public class Morning {
public String morning() {
return "Bonjour le matin";
}
}
// src/greetings/spanish/Morning.java
public class Morning {
public String morning() {
return "Buenos días";
}
}
// src/Main.java
public class Main {
public static void main(String[] args) {
Morning englishMorning = new Morning();
System.out.println(englishMorning.morning());
}
}
すべて同じクラス名「Morningクラス」を作成し、英語、フランス語、スペイン語の朝の挨拶を返すようにしています。
しかし、これでは、「Morningクラス」が重複しているため「error: duplicate class: Morning public class Morning {....」のように「同じクラス名が複数の場所で定義されているので実行できません」というエラーが出てしまいます。
一言で言えば、Java側でMorningクラスが複数存在するので、どのMorningクラスを使えばよいかわからなくなっているのが原因です。
例えるなら、学校で佐藤くんと読んだときに、はい!はい!はい!と3名答えてしまう感じです。
なので「〇〇クラスの番号5番の佐藤くん」というように具体的に呼べば問題解決になります。
この、「〇〇クラスの番号5番の佐藤くん」というのが「名前空間」と呼びます。
パッケージを使うと、同じクラス名でも使えるようになる
それでは、Morningクラスをパッケージ化して、同じクラス名でも使えるようにしていきます。
それぞれのMorignクラスに下記のパッケージを記述します。
- package greetings.english;
- package greetings.french;
- package greetings.spanish;
このように記述することで、greetingsのenglishに属するMorignクラスと定義することができます。
※ パッケージを指定するときはフォルダ構成と合わせるようにしてください
◎フォルダ構成
src/
greetings/
english/
Morning.java
french/
Morning.java
spanish/
Morning.java
Main.java
◎サンプルコード
// src/greetings/english/Morning.java
package greetings.english;
public class Morning {
public String morning() {
return "Good morning";
}
}
// src/greetings/french/Morning.java
package greetings.french;
public class Morning {
public String morning() {
return "Bonjour le matin";
}
}
// src/greetings/spanish/Morning.java
package greetings.spanish;
public class Morning {
public String morning() {
return "Buenos días";
}
}
// src/Main.java
public class Main {
public static void main(String[] args) {
greetings.english.Morning englishMorning = new greetings.english.Morning();
System.out.println(englishMorning.morning());
greetings.french.Morning frenchMorning = new greetings.french.Morning();
System.out.println(frenchMorning.morning());
greetings.spanish.Morning spanishMorning = new greetings.spanish.Morning();
System.out.println(spanishMorning.morning());
}
}
◎実行結果
Good morning
Bonjour le matin
Buenos días
「greetings.english.Morning englishMorning = new greetings.english.Morning(); System.out.println(englishMorning.morning());」のように呼び出すときは、パッケージ名.クラス名で指定することで、〇〇に属するMorningクラスを見つけることができます。
このようにパッケージ化をすることで別のパッケージであれば、同じ名前のクラスを使うことができます。
最後に
今回はJavaの名前空間について勉強していきました!
プログラミングを学習している人の助けになれば嬉しいです。