クラスにフィールドを持たせる
new Ticket() を 2 回書けば、実体は 2 つできます。ところが今のままでは、その 2 つに違いがありません。1 枚は A 列 12 番、もう 1 枚は B 列 3 番、と覚えさせる場所がどこにも無いからです。中身が空の設計図から作った実体は、何も持っていない箱です。
中に変数を書くと、実体の持ち物になる
クラスの中に書いた変数を フィールド と呼びます。書き方はこれまでの変数宣言とほとんど同じで、置く場所がメソッドの中ではなくクラスの直下になるだけです。
Java
public class Ticket {
public String seat;
public int price;
}seat と price が Ticket のフィールドです。メソッドの中で宣言した変数はそのメソッドが終われば消えますが、フィールドは実体が生きているあいだ値を持ち続けます。ここが決定的な違いです。
public は、外から読み書きしてよいという印です。実際の開発では隠すのが普通ですが、今はまず持たせることに集中します。
ドットでつないで出し入れする
フィールドに触るには、実体を入れた変数のうしろに、ドットとフィールド名をつなげます。
Java
Ticket t = new Ticket();
t.seat = "A-12";
t.price = 4800;
System.out.println(t.seat + " " + t.price + "円"); // A-12 4800円代入も読み出しも、普通の変数と同じ感覚で書けます。違うのは、誰の seat なのかを必ず先に言うところです。seat とだけ書くことはできません。
なお、フィールドは何も代入していなくても値を持っています。数値なら 0、boolean なら false、String のようなオブジェクトの型なら null です。null はまだ何も指していないという状態で、このまま t.seat.length() のように中身を触りにいくと NullPointerException が飛びます。実体を作ったら値を入れる、という順番を守ってください。
実体が別なら、値も別
フィールドの値は実体ごとに独立しています。同じ Ticket 型から作っても、片方を書き換えたときにもう片方が巻き込まれることはありません。
Java
Ticket a = new Ticket();
Ticket b = new Ticket();
a.seat = "A-12";
b.seat = "B-3";
System.out.println(a.seat); // A-12
System.out.println(b.seat); // B-3設計図は 1 枚でも、そこから作った実体はそれぞれ別の値を抱えます。これがあるから、Ticket という型を 1 つ書くだけで、何百枚のチケットでも扱えます。
やってみよう
createBookTitle(String title) は、Book の実体を作って、受け取った title をフィールドに入れ、そのフィールドの値を返すメソッドです。
BookはSolutionの中にstatic classとして書きます。フィールドはStringを 1 つ持たせれば足ります- 引数をそのまま
returnすると値としては合ってしまいますが、フィールドを 1 度も使っていません。必ず実体に入れてから、実体から取り出して返してください - 空文字列
""を渡しても、そのまま""が返ります。特別扱いは要りません
要件
createBookTitleの中でnew Book()を使ってインスタンスを作ることbook.titleフィールドに引数titleを代入してからreturnすること (固定文字列の即時 return は不可)- 戻り値はそのインスタンスの
titleフィールドの値であること
入出力例
createBookTitle("Java 入門") → "Java 入門"
createBookTitle("Effective Java") → "Effective Java"
createBookTitle("") → ""