Javaにおける主要なオブジェクト指向の構成要素は_クラス_です。クラスは、データ(フィールド)と振る舞い(メソッド)を組み合わせたものです。 クラスのフィールドとメソッドは、まとめて_メンバー_と呼ばれます。
メンバーへのアクセスはアクセス修飾子で制御できます。よく使われるのは次の2つです。
public:どのコードからもアクセスできます(制限なし)。private:同じクラス内のコードからしかアクセスできません。クラスは、そのクラスのインスタンスを作るためのテンプレートだと考えるとよいでしょう。
クラスのインスタンス(_オブジェクト_とも呼ばれます)を作るには、newキーワードを使います。
class Car {
}
// Create two car instances
Car myCar = new Car();
Car yourCar = new Car();
フィールドには型と名前(camelCaseで定義します)があり、クラス内のどこにでも定義できます(慣例として、クラス名はPascalCaseで書きます)。
class Car {
// Accessible by anyone
public int weight;
// Only accessible by code in this class
private String color;
}
フィールドには、任意で初期値を割り当てることができます。 フィールドに初期値を指定_しない_場合、そのフィールドは型のデフォルト値に設定されます。 インスタンスのフィールドの値には、ドット記法でアクセスしたり更新したりできます。
class Car {
// Will be set to specified value
public int weight = 2500;
// Will be set to default value (0)
public int year;
}
Car newCar = new Car();
newCar.weight; // => 2500
newCar.year; // => 0
// Update value of the field
newCar.year = 2018;
privateなフィールドは、通常、メソッドを呼び出した副作用として更新されます。
そのようなメソッドは通常、値を返しません。その場合、戻り値の型はvoidにします。
class CarImporter {
private int carsImported;
public void importCars(int numberOfCars)
{
// Update private field from public method
carsImported = carsImported + numberOfCars;
}
}
この演習では、ラジコンカーをあれこれ動かしてみます。このラジコンカーは、お金をやっと貯めて買えるようになったものです。
車は満充電(100%)のバッテリーからスタートします。リモコンで車を走らせるたびに、車は20メートル進み、バッテリーを1%消費します。
このラジコンカーには、2つの情報を表示するおしゃれなLEDディスプレイが付いています。
"Driven <METERS> meters"です。"Battery at <PERCENTAGE>%"です。バッテリーが0%になると、もう車を走らせることはできず、バッテリーの表示は"Battery empty"になります。
課題は6つあり、どれもラジコンカーのインスタンスを扱います。
新品のラジコンカーのインスタンスを返す(静的)なJedliksToyCar.buy()メソッドを実装しましょう。
JedliksToyCar car = JedliksToyCar.buy();
LEDディスプレイに表示される距離を返すJedliksToyCar.distanceDisplay()メソッドを実装しましょう。
JedliksToyCar car = JedliksToyCar.buy();
car.distanceDisplay();
// => "Driven 0 meters"
LEDディスプレイに表示されるバッテリーの残量を返すJedliksToyCar.batteryDisplay()メソッドを実装しましょう。
JedliksToyCar car = JedliksToyCar.buy();
car.batteryDisplay();
// => "Battery at 100%"
走行したメートル数を更新するJedliksToyCar.drive()メソッドを実装しましょう。
JedliksToyCar car = JedliksToyCar.buy();
car.drive();
car.drive();
car.distanceDisplay();
// => "Driven 40 meters"
バッテリーの残量を更新するようにJedliksToyCar.drive()メソッドを更新しましょう。
JedliksToyCar car = JedliksToyCar.buy();
car.drive();
car.drive();
car.batteryDisplay();
// => "Battery at 98%"
バッテリーが切れている(0%)ときは、走行距離を増やさず、バッテリーの残量も減らさないようにJedliksToyCar.drive()メソッドを更新しましょう。
JedliksToyCar car = JedliksToyCar.buy();
// Drain the battery
// ...
car.distanceDisplay();
// => "Driven 2000 meters"
car.batteryDisplay();
// => "Battery empty"