本記事は、Javaを一から学んでいく際の学習メモとして書かれています。
主にインプレスから出版されている「スッキリわかるJava入門 第2版 (スッキリシリーズ)」の内容に沿ったかたちで学習していきます。
今回は、Javaのクラスについて学んでいきます。
クラスとは
Javaでは、オブジェクトを定義するためクラス(Class)という一つの纏まったファイルに記述します。
この中には、メンバ(member)と呼ばれるフィールド(field:属性)やメソッド(method:操作)、また初期化するためのコンストラクタ(constructor)などを定義していきます。
クラス図とは
クラスを定義していくうえで、そのクラスがどのような属性や操作を持っているかを
図式化したものにクラス図(class diagram)というものがあります。
このクラス図とは、UML(Unified Modeling Language:統一モデリング言語)というもので定められており、世界共通で利用されています。
今回は例として、本を表すBookクラスを作成してみたいと思います。
クラス図は以下のようになります。
上記fig1の上段がクラス名になります。
中段にはフィールドを記述し、「アクセス修飾子 変数名:型名」の順番で表現します。
(アクセス修飾子については次回以降勉強します)。
なお、アクセス修飾子のチルダ(~)はデフォルトアクセス(package private)を意味し、同一パッケージであればアクセスできることを意味します。
下段にはメソッドを記述します。
上記のtoStringメソッドは引数を取らず、String型を返すメソッドですが、実はこれはObjectクラスというものを暗黙に継承(extends)しており、その中に定義されているメソッドをオーバーライド(override:上書き)したものになります(継承やオーバーライドについては次回以降勉強します)。
なお、オーバーライドする際は継承元(ここではObjectクラス)のアクセス修飾子と同じか、もしくはより緩いレベルにしなければなりません。
Objectクラスに記述されているtoStringメソッドのアクセス修飾子はpublicであり、これより緩いレベルのアクセス修飾子は無いので、必然的にpublic(上記ではプラス(+))にしなければコンパイルエラーとなります。
クラスの定義
それでは、上記で作成したクラス図を基に、クラスを宣言していきます。
// Book.java public class Book{ String title; String author; int price; @Override public String toString(){ return "title:" + title + " author:" + author + " price:" + price; } }
上記の3行から5行までがフィールドになり、7行から10行までがメソッドになります。
toStringメソッドの上部に@Override
の記述がありますが、これはオーバーライドアノテーションといいます。
こちらは記述しなくてもコンパイルエラーにはなりませんが、前述のとおりtoStringメソッドはObjectクラスのメソッドをオーバライドしたものです。
こちらのアノテーションを記述することで、コンパイラ側で正しくオーバーライドがされているかをチェックしてくれるので、省略せずに記述したほうが良いです。
インスタンスの作成
それでは、上記で作成したBookクラスをMainクラスから呼び出し、インスタンスを作成していきます。
Bookクラスのようなクラスは、ただオブジェクトの在り方(振る舞い)を定義しただけにすぎず、これを利用するためには実体となるオブジェクトを作成しなければいけません。
// Main.java public class Main { public static void main(String[] args) { Book book = new Book(); book.title = "スッキリわかるJava入門"; book.author = "中山清喬/国本大悟"; book.price = 2600; System.out.println(book); } }
まず、4行目でBook型のインスタンスを生成します。
インスタンスを生成するためにはnew演算子を使い、「new クラス名()」で記述します。
上記の5行から7行でフィールドに値をセットしていて、「変数名.フィールド名」で各フィールドにアクセスすることが出来ます。
なお、今回のようにクラス定義内でフィールドに値をセットしていない状態では、インスタンス化した後に数値型は0、参照型はnull、boolean型はfalseで初期化されます。
9行目では、変数をそのままprintln()
に渡していますが、これはコンパイラで自動的にbook.toString()
に置き換えられるため、以下のように明示的に記述しても問題ありません。
System.out.println(book.toString());
上記を実行すると以下が表示されます。
> title:スッキリわかるJava入門 author:中山清喬/国本大悟 price:2600
最後に
今回はJavaのクラスとインスタンスについて、基本的なルールを学びました。
次回はインスタンスを生成する際に初期値をセットするコンストラクタについて学んでいきます。
参考書籍