クラスを定義する
チケット 1 枚を表すのに、座席番号の String、値段の int、使用済みかどうかの boolean と、変数が 3 つ要ります。3 枚扱うなら 9 個です。メソッドに渡すときも 3 つ並べて渡すことになり、順番を 1 つ入れ替えただけで、エラーも出ないまま壊れます。ここまで使ってきた int や String では、チケットというひとまとまりを表せません。
無い型は、自分で作れる
Java の答えは、型そのものを増やすことです。class は、新しい型をこの世に 1 つ増やすための宣言です。
Java
public class Ticket {
}中身は空でも、これで Ticket という型が使えるようになります。左から読むと、public はどこからでも使ってよいという印、class はこれが型の定義だという合図、Ticket が新しい型の名前、{ } がその中身を入れる場所です。
型の名前は大文字で始めて、単語の区切りも大文字にします。Ticket UserProfile ShoppingCart のような書き方です。変数名やメソッド名は小文字で始めるので、見た瞬間にどちらなのかが分かる、という約束になっています。
名前には動詞ではなく名詞を選びます。クラスが表すのは、することではなく、ものだからです。
作った型は、int と同じように使える
型を 1 つ増やすと、その名前がそのまま変数の型として使えるようになります。
Java
int n = 3;
String s = "hello";
Ticket t = new Ticket();3 行目が今回の山場です。左側の Ticket は変数の型、右側の new Ticket() は、その設計図から実体を 1 つ作れという命令です。int のように書いただけで値が生まれる型と違って、自分で作った型は new を書かないと中身が生まれません。
設計図は 1 枚しかありませんが、new を書いた回数だけ実体が生まれます。1 つのたい焼き型から何個でもたい焼きが焼けるのと同じ関係です。
コンパイラが見ている 2 つの決まり
書き方の好みではなく、守らないと止まる決まりが 2 つあります。
public class Ticketと書いたファイルは、ファイル名をTicket.javaにする。ずれているとclass Ticket is public, should be declared in a file named Ticket.javaで止まります- 1 つのファイルに
public classは 1 つだけ。2 つめを書くと同じくコンパイルエラーになります
public を付けなければ同じファイルに何個でも書けるので、練習では 1 つのファイルに型を並べて構いません。
Java
public class ticket { } // 通るが、Java では読み手を混乱させる書き方
public Ticket { } // class の書き忘れ。class, interface, enum, or record expectedやってみよう
createBook() は、Book という型を自分で定義し、その実体を 1 つ作って、クラス名の文字列を返すメソッドです。
Solutionの中に、Bookという名前の型をstatic classとして 1 つ定義します。中身は空で構いません- 実体からクラス名を取り出すには
getClass().getSimpleName()を使います - 文字列を直接
returnしても表示上はテストが通りますが、それでは型を 1 つも作っていません。必ず自分で定義した型から実体を作って、そこから名前を取ってください
要件
Solutionの中にBookクラスを定義すること (本文のstatic class Book { }で十分)createBook()の中でnew Book()を使ってインスタンスを作ること- 戻り値はそのインスタンスのクラス名
"Book"という文字列にすること
入出力例
createBook() → "Book"
createBook() → "Book"