
Java入門|インポートでクラスを簡単に使う
インポートを覚えると、別パッケージのクラスがぐっとすっきり書けるようになる
前回は、異なるパッケージにあるクラスを使うときには、パッケージ名を含めてクラス名を書く必要があることを学びました。これはJavaのしくみとしてとても大切で、どのパッケージにあるどのクラスを使っているのかをはっきり示すための書き方でした。
ただ、実際のプログラムでは、別パッケージのクラスを1つだけ使うとは限りません。たくさんのクラスを利用する場面では、毎回長いパッケージ名を書き続けるのは少し手間がかかりますし、コードの見通しも少し悪くなります。そこで役立つのが、import 文です。
import を使うと、別パッケージのクラスをあらかじめ読み込んでおけるので、コードの中ではパッケージ名を毎回書かずに、クラス名だけで使えるようになります。今回は、ドラゴンボールの世界をイメージしたクラスを使いながら、import の基本的な考え方と使い方をやさしく整理していきましょう。
インポートとは何か
Javaで別のパッケージにあるクラスを使うとき、何も準備をしなければ、クラス名の前にパッケージ名をつけて書く必要があります。
たとえば、pc パッケージにある Fighter クラスを使うなら、次のように書く形です。
pc.Fighter fighter1 = new pc.Fighter();この書き方は正しいのですが、毎回 pc.Fighter と書くことになります。
クラスを1回だけ使うならそれほど気にならなくても、何度も出てくると少し見づらくなってきます。
そこで、ファイルの先頭に import 文を書いておくと、そのクラスをこのファイルで使います、ということを先に宣言できます。すると、その後はクラス名だけで書けるようになります。
インポートの基本の書き方
インポートの基本の書き方はとてもシンプルです。
import パッケージ名.クラス名;たとえば、pc パッケージにある Fighter クラスを読み込みたいなら、次のように書きます。
import pc.Fighter;こうしておけば、そのファイルの中では Fighter とだけ書いて利用できます。
インポートを使うと何が便利になるのか
import の便利さは、主に次のようなところにあります。
| 使わない場合 | 使う場合 |
|---|---|
| 毎回 パッケージ名.クラス名 と書く | クラス名だけで書ける |
| 記述が長くなりやすい | コードがすっきりする |
| 同じクラスを何度も使うと見づらい | 読みやすくなる |
| 書き間違いが増えやすい | 記述の負担が減る |
つまり、import はコードを短くするためだけではなく、読みやすく、整理しやすくするための仕組みでもあります。
まずは import を使わない場合を確認しよう
import を使わない場合、異なるパッケージのクラスは、パッケージ名を含めて書く必要があります。
たとえば、pb パッケージにあるクラスから、pc パッケージの Fighter クラスを使うなら、こんな形になります。
pc.Fighter fighter1 = new pc.Fighter();この書き方自体はまったく問題ありません。
Javaとしても、どこの Fighter クラスなのかがはっきりしているので、正しく理解できます。
ただし、同じ Fighter クラスを何回も使うと、そのたびに pc.Fighter と書くことになり、コードが少し重たく見えてきます。
import を使うとどう変わるのか
ファイルの先頭で Fighter クラスを import しておくと、その後は Fighter だけで使えます。
import pc.Fighter;この1行を書いておけば、コードの中では次のように書けます。
Fighter fighter1 = new Fighter();この変化はとても大きいです。
使っているクラスそのものに意識を向けやすくなり、パッケージ名の長さに引っ張られずにコードを読めるようになります。
今回の例で使う考え方
今回は、pb パッケージに属する Sample6 クラスから、pc パッケージにある Fighter クラスを使う場面を考えます。
ここで前提になるのは、pc パッケージ側にある Fighter クラスが、別パッケージから使えるように public で宣言されていることです。
異なるパッケージから使うには、この条件が必要でしたね。
そのうえで、Sample6.java では import pc.Fighter; と書くことで、Fighter クラスを読み込みます。すると、main メソッドの中では Fighter というクラス名だけで使えるようになります。
サンプルプログラム:import の確認
ファイル名:Sample6.java
package pb;
import pc.Fighter;
class Sample6 {
public static void main(String[] args) {
Fighter fighter1 = new Fighter();
fighter1.show();
}
}このプログラムのポイント
このコードで注目したいのは、ファイルの先頭にある次の1行です。
import pc.Fighter;この指定によって、pc パッケージにある Fighter クラスを、このファイルで使えるようにしています。
そのため、main メソッドの中では、
Fighter fighter1 = new Fighter();と書くだけでよくなっています。
もし import がなければ、ここは
pc.Fighter fighter1 = new pc.Fighter();のように書かなければなりません。
import があることで、コードがかなりすっきりしていますね。
実行結果のイメージ
pc パッケージ側の Fighter クラスが、たとえばコンストラクタで初期メッセージを表示し、show メソッドで現在の状態を表示するように作られているとします。すると、Sample6 を実行したときには、たとえば次のような表示になります。
戦士を準備しました。
戦士名は未設定です。
戦闘力は0です。ここで大事なのは表示内容そのものよりも、別パッケージのクラスを、import によってシンプルに使えていることです。
import 文はどこに書くのか
import は、ファイルの先頭付近に書きます。
順番としては、まず package 文があり、そのあとに import 文を書きます。
今回の Sample6.java でも、次の順序になっています。
| 順番 | 内容 |
|---|---|
| 1 | package pb; |
| 2 | import pc.Fighter; |
| 3 | クラス定義 |
この順番はとても大切です。
package 文の前に import を書くことはできませんし、クラス定義の途中に書くこともできません。
package 文と import 文の役割の違い
ここは混同しやすいところなので、表で整理しておきましょう。
| 文 | 役割 |
|---|---|
| package 文 | このファイルのクラスがどのパッケージに属するかを決める |
| import 文 | 別のパッケージのクラスを使いやすくする |
| クラス定義 | 実際の処理内容を書く |
つまり、
- package は自分の住所を決めるもの
- import は使いたい相手を読み込むもの
と考えると、とてもわかりやすいです。
import を使ってもクラスの所属は変わらない
ここも大事なポイントです。
import を書いたからといって、読み込んだクラスが自分のパッケージに移動してくるわけではありません。
今回の例では、Fighter クラスはあくまで pc パッケージのクラス です。
Sample6 クラスは pb パッケージのクラス です。
import pc.Fighter; と書くことで、pb パッケージの Sample6 から pc パッケージの Fighter を使いやすくしているだけです。
所属そのものは変わりません。
この関係を整理すると、こうなります。
| クラス名 | 所属パッケージ |
|---|---|
| Fighter | pc |
| Sample6 | pb |
import は、別のパッケージのクラスを見えやすくする仕組みであって、クラスの所属先を変更する仕組みではないのです。
import があるとコードが読みやすくなる理由
import を使うと、コードの中で注目したい情報が見えやすくなります。
たとえば、次の2つを見比べてみてください。
import を使わない書き方
pc.Fighter fighter1 = new pc.Fighter();
fighter1.show();import を使う書き方
Fighter fighter1 = new Fighter();
fighter1.show();後者のほうが、処理の流れがすっと目に入ってきます。
もちろん、どこの Fighter クラスなのかという情報も大切ですが、それはファイル先頭の import 文を見ればわかります。
このように、詳細な情報は先頭にまとめ、処理本体は読みやすく保つのが import のよさです。
インポートの考え方を図で整理する

この図では、左側に pc パッケージ、その中に Fighter クラスがあり、右側に pb パッケージ、その中に Sample6 クラスが配置されています。
そして、pc パッケージから pb パッケージへ向かう矢印に import pc.Fighter; と書くことで、Sample6 が Fighter クラスを読み込んでいることを表しています。
さらに、Sample6 クラスの中には Fighter fighter1 = new Fighter(); と書かれていて、コード中ではパッケージ名を省略して使えていることがわかります。
この図を見ると、import の役割がかなりはっきり見えてきます。
import を使うときに気をつけたいこと
便利な import ですが、いくつか意識しておきたい点もあります。
| 注意点 | 内容 |
|---|---|
| import しても public でなければ使えないことがある | 別パッケージから使えるクラスである必要がある |
| import は package 文のあとに書く | 順序を間違えない |
| import しても所属パッケージは変わらない | あくまで使いやすくするだけ |
| 同名クラスが複数あるときは注意が必要 | どのクラスを使うか混乱しやすい |
特に最後の点は今後大切になります。
たとえば pa.Fighter と pc.Fighter の両方がある場合、単純に Fighter と書いただけでは、どちらを使いたいのかが問題になることがあります。そんな場面では、あえてパッケージ名つきで書くほうがわかりやすいこともあります。
import とパッケージ名つき記述の使い分け
ここで、2つの書き方を整理しておきましょう。
| 書き方 | 例 | 特徴 |
|---|---|---|
| パッケージ名つきで書く | pc.Fighter fighter1 = new pc.Fighter(); | どのクラスか明確 |
| import してクラス名だけで書く | Fighter fighter1 = new Fighter(); | コードがすっきりする |
どちらも正しい書き方です。
Javaでは、場面に応じて読みやすいほうを選ぶことが大切です。
ただ、同じクラスを何度も使うなら、import の便利さはとても大きいです。
コード全体の見通しがよくなり、処理の流れに集中しやすくなります。
ここまでで押さえたいこと
今回の内容で、特に大事なのは次の点です。
| 大事なポイント | 内容 |
|---|---|
| import を使うと別パッケージのクラスを読み込める | ファイル先頭で指定する |
| import 後はクラス名だけで使える | パッケージ名を毎回書かなくてよい |
| package 文と import 文は役割が違う | package は所属、import は利用準備 |
| import してもクラスの所属先は変わらない | 使いやすくなるだけ |
| コードが読みやすくなる | 長い記述を減らせる |
import は、Javaの文法の中でもとても実用的な機能です。
大きなプログラムになればなるほど、その便利さを実感しやすくなります。
異なるパッケージのクラスをそのまま使う方法を知ったうえで、さらに import を覚えると、コードの整理のしかたが一段と上手になります。ここまでの流れをひとつずつ積み重ねていくと、Javaで大きめのプログラムを扱う感覚がしっかり育っていきます。
