こんな方におすすめ
- プログラミング初心者の方
- 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の名前空間について勉強していきました!
プログラミングを学習している人の助けになれば嬉しいです。