Javaにおける中心的なオブジェクト指向の構成要素は_クラス_です。クラスは、データ(フィールド、インスタンス変数とも呼ばれます)と振る舞い(メソッド)を組み合わせたものです。 クラスのフィールドとメソッドは、その_メンバー_と呼ばれます。
メンバーへのアクセスは、アクセス修飾子で制御できます。よく使われるのは次の2つです。
Javaでは、アクセス修飾子を指定しない場合、デフォルトは_パッケージ可視性_になります。 この場合、そのメンバーは同じパッケージに定義されたすべてのクラスから参照できます。
このように、関連するデータと振る舞いをひとまとめにし、さらにメンバーへのアクセスを制限することをカプセル化と呼びます。これはオブジェクト指向の中核となる概念の1つです。
クラスは、そのクラスのインスタンスを生成するためのテンプレートと考えることができます。
クラスのインスタンスを生成するには(これは_オブジェクト_とも呼ばれます)、newキーワードを使います。
class Car {
}
// Create two car instances
Car myCar = new Car();
Car yourCar = new Car();
フィールドには型と名前(キャメルケースで表記)があり、クラス内のどこにでも定義できます(パスカルケースで表記)。
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
carsImported = carsImported + numberOfCars;
}
}
なお、Javaのクラスではpublicなフィールドを使うのは一般的ではありません。
通常はprivateなフィールドを使い、ゲッター_と_セッターを通してアクセスします。
クラスの中では、thisキーワードは現在のクラスを指します。
これは、仮引数がフィールドと同じ名前を持つ場合に特に便利です。
class CarImporter {
private int carsImported;
public void setImportedCars(int carsImported)
{
// Update private field from public method
this.carsImported = carsImported;
}
}