クラスを定義してみました。クラスを定義すると、新しい型が作成されます。クラスを配置したら、対応するタイプのオブジェクトを構築します。さらに、各タイプには、ユーザーが使用できる明確なインターフェイスも必要です。
新しいクラスの定義で他のオブジェクトを使用できます。これが構成です。組み合わせは、Java でプログラムの再利用性を実現するための基本的な手段の 1 つです。
「has-a」との組み合わせ
あるオブジェクトは、別のオブジェクトのデータ メンバーです。たとえば、前述の充電式懐中電灯の例を見てみましょう。
充電式懐中電灯のバッテリー、LED ライト、ボタンなどはすべてオブジェクトになります。 Battery クラスを定義して、バッテリー オブジェクトを定義および生成できます。充電式懐中電灯のクラス定義では、バッテリー オブジェクトをデータ メンバーとして使用して、バッテリー部分のステータスを表すことができます。
以下に Battery クラスを定義し、power を使用してその電力を表します。バッテリーは充電 (chargeBattery) および使用 (useBattery) できます。 Battery タイプのオブジェクトを後続の Torch クラス定義のデータ メンバーとして使用します。
次のようにコードをコピーします。
クラスバッテリー
{
パブリックボイドチャージバッテリー(ダブルp)
{
if (this.power < 1.) {
this.power = this.power + p;
}
}
public boolean useBattery(double p)
{
if (this.power >= p) {
this.power = this.power - p;
true を返します。
}
それ以外 {
this.power = 0.0;
false を返します。
}
}
プライベート 2 乗 = 0.0;
}
クラストーチ
{
/**
* 1時間あたりの使用電力は10%
* 停電時の警告
*/
public void TurnOn(int 時間)
{
ブール値が使用可能。
使用可能 = this.theBattery.useBattery( 時間*0.1 );
if (使用可能!= true) {
System.out.println("もう使用できません。充電する必要があります!");
}
}
/**
* 1 時間あたり 20% の電力充電
*/
公共無効料金(整数時間)
{
this.theBattery.chargeBattery( 時間*0.2 );
}
/**
* 構成
*/
プライベートバッテリー theBattery = new Battery();
}
上記の新しいものは、Battery オブジェクトにメモリを割り当てます。これは不可欠です。
Battery クラスを定義します。 Torch クラスは、Battery 型オブジェクト (theBattery) をデータ メンバーとして使用します。 Torch のメソッドでは、Battery オブジェクトのインターフェイスを操作することで、Battery クラスが提供する機能 (機能) を実装します。
トーチ オブジェクトはバッテリー オブジェクトを持っている (has-a) と言います。上記の関係は次のように表すことができます。
has-a: 懐中電灯にはバッテリーが付いています (上記のひし形の接続に注意してください)
組み合わせることで、バッテリー関連のコードを再利用できます。携帯電話や電卓など、Battery を使用する他のクラスがある場合は、Battery オブジェクトをそれらに結合できます。これにより、クラスごとに個別の関連関数を作成する必要がなくなります。
Test クラスを追加して実際の効果を確認できます。
次のようにコードをコピーします。
パブリッククラステスト
{
public static void main(String[] args)
{
トーチ aTorch = 新しいトーチ();
System.out.println("料金: 2 時間");
トーチチャージ(2);
System.out.println("最初の電源オン: 3 時間");
aTorch.turnOn(3);
System.out.println("2 回目の電源オン: 3 時間");
aTorch.turnOn(3);
}
}
上記のプログラムを実行した結果:
充電:2時間
最初の電源オン: 3 時間
2回目の電源投入: 3時間
もう使えないので充電する必要があります。
電池切れの検出(useBattery()の戻り値による)など、電池オブジェクトが提供する機能を組み合わせて利用します。
基本タイプ
HelloWorld からオブジェクト指向まで、int、float、double、boolean などの基本型 (プリミティブ型) を特別なクラスと呼びます。整数は int 型のオブジェクトとして理解できます。 int 型には、代入、加算、減算などの演算インターフェイスを持つことができます。通常の型は、基本型の拡張であると考えることができます。データ メンバー、メソッド パラメーター、メソッドの戻り値、およびメソッド内の自動変数としてプリミティブ型を見てきました。 Battery クラス オブジェクトや Torch クラス オブジェクトなど、自然で一般的なタイプのオブジェクトも、これらの場所で使用できます。
C 言語では、使用できるデータ型は (基本的に) int や float など、あらかじめ設定されています。 Java では、これらのプリセットのデータ型を使用するだけでなく、クラスを通じて必要なデータ型をカスタマイズし、それらを組み合わせて使用することもできます。ただし、ベーシックタイプと通常タイプには違いがあります。基本型は頻繁に使用され、占有するメモリ領域が少ないため、Java では効率を高めるために、これらの基本型は通常の型 (カスタム クラス) とは異なるメモリ管理方法を備えています。たとえば、基本型は宣言されるとメモリ領域が割り当てられますが、通常の型は new キーワードを使用してメモリ領域を割り当てる必要があります。
Java は、各基本型に対応する共通型を提供します。たとえば、int 基本型は Integer 型に対応します。基本型のオブジェクトが対応する共通型変数に変換されると、いわゆる基本型は一般的な意味での型になります (メモリ管理の違いはなくなります)。
このようにして、「すべてはオブジェクトである」という Java の概念をより深く理解できます。
要約する
組み合わせ、あり
基本タイプ