クラスとインスタンス
1 クラス
オブジェクト指向プログラミングでは、「オブジェクト」は、別のオブジェクトによってクラスから作られます。クラスはオブジェクトの設計図のようなものであり、プログラマはこのクラスをコーディングします。この設計図(クラス)からは任意の個数のオブジェクトを作ることができます。ここで、オブジェクトの状態を保持する変数がフィールド(メンバー変数、属性)であり、動作/機能を記述したものがメソッドです。
変数やメソッドにはこの4種類いずれかのアクセス修飾子を付けることができます。クラスには public か指定なしとすることができます。
| アクセス修飾子 | 同一クラス | 同一パッケージ | 派生クラス | すべて |
|---|---|---|---|---|
| public | 〇 | 〇 | 〇 | 〇 |
| protected | 〇 | 〇 | 〇 | × |
| なし(パッケージプライベート) | 〇 | 〇 | × | × |
| private | 〇 | × | × | × |
アクセス修飾子の後に定義された変数やメソッドは、そのアクセス可能性をを持ちます。
| アクセス修飾子 | 同一クラス | 派生クラス | すべて |
|---|---|---|---|
| public | 〇 | 〇 | 〇 |
| protected | 〇 | 〇 | × |
| private | 〇 | × | × |
アクセス修飾子の後に定義された変数やメソッドは、そのアクセス可能性をを持ちます。
| アクセス修飾子 | 同一クラス | 派生クラス | 同一プロジェクト | すべて |
|---|---|---|---|---|
| public | 〇 | 〇 | 〇 | 〇 |
| protected | 〇 | 〇 | × | × |
| internal | 〇 | × | 〇 | × |
| protected internal | 〇 | 〇 | 〇 | × |
| protected private | 〇 | △ | △ | × |
| private | 〇 | × | × | × |
アクセス修飾子の後に定義された変数やメソッドは、そのアクセス可能性をを持ちます。
| アクセス修飾子 | 同一クラス | 派生クラス | 同一プロジェクト | すべて |
|---|---|---|---|---|
| Public | 〇 | 〇 | 〇 | 〇 |
| Protected | 〇 | 〇 | × | × |
| Friend | 〇 | × | 〇 | × |
| Protected Friend | 〇 | 〇 | 〇 | × |
| Private | 〇 | × | × | × |
変数やメソッドにはこの3種類のアクセス修飾子を付けることができます。指定しない場合には public と解釈されます。
| アクセス修飾子 | 同一クラス | 派生クラス | すべて |
|---|---|---|---|
| public | 〇 | 〇 | 〇 |
| protected | 〇 | 〇 | × |
| private | 〇 | × | × |
変数やメソッドにはこの3種類のアクセス修飾子を付けることができます。指定しない場合には public と解釈されます。
| アクセス修飾子 | 同一クラス | 派生クラス | すべて |
|---|---|---|---|
| public | 〇 | 〇 | 〇 |
| protected | 〇 | 〇 | × |
| private | 〇 | × | × |
変数やメソッドにはこの3種類のアクセス修飾子を付けることができます。指定しない場合には internal と解釈されます。
| アクセス修飾子 | 同一クラス | 同一ファイル | 派生クラス | 同一プロジェクト | すべて |
|---|---|---|---|---|---|
| open | 〇 | 〇 | 〇 | 〇 | 〇(継承、オーバーライド可) |
| public | 〇 | 〇 | 〇 | 〇 | 〇(継承、オーバーライド不可) |
| internal | 〇 | 〇 | 〇 | 〇 | × |
| fileprivate | 〇 | 〇 | × | × | × |
| private | 〇 | × | × | × | × |
4種類いずれかのアクセス修飾子を付けることができます。省略した場合は public と見なされます。
| アクセス修飾子 | 同一クラス(ファイル) | 同一モジュール | 派生クラス | すべて |
|---|---|---|---|---|
| public | 〇 | 〇 | 〇 | 〇 |
| internal | 〇 | 〇 | × | × |
| protected | 〇 | × | 〇 | × |
| private | 〇 | × | × | × |
いずれかのアクセス修飾子を付けることができます。省略した場合は public と見なされます。
| アクセス修飾子 | 同一クラス | 指定クラス | 同一パッケージ | 指定パッケージ | 派生クラス | すべて |
|---|---|---|---|---|---|---|
| public | 〇 | - | 〇 | - | 〇 | 〇 |
| protected | 〇 | - | × | - | 〇 | × |
| protected[パッケージ名] | 〇 | - | × | 〇 | 〇 | × |
| protected[クラス名] | 〇 | 〇 | × | - | 〇 | × |
| protected[this] | 自インスタンスからのみ | × | - | 〇 | × | |
| private | 〇 | - | × | - | × | × |
| private[パッケージ名] | 〇 | - | × | 〇 | × | × |
| private[クラス名] | 〇 | 〇 | × | - | × | × |
| private[this] | 自インスタンスからのみ | × | - | × | × | |
3種類いずれかのアクセス修飾子を付けることができます。省略した場合は public と見なされます。
| アクセス修飾子 | 同一クラス | 同一パッケージ | 派生クラス | すべて |
|---|---|---|---|---|
| public | 〇 | 〇 | 〇 | 〇 |
| protected | 〇 | △ | 〇 | △ |
| private | 〇 | △ | △ | △ |
- アクセス修飾子はありません。変数名、メソッド名を大文字から始めると別パッケージからも参照できます(小文字から始まる、変数、メソッドはパッケージ・プライベートです)。
- メソッドは、レシーバに指定したクラスに属します。
- コンストラクタは特にありません。その代わり、クラスのインスタンスを返すメソッド(レシーバはありません)を記述します。また、コンストラクタ名も決まっていませんが、通常は New<クラス名> とします。
変数やメソッドにはこの3種類いずれかのアクセス修飾子を付けることができます。指定しない場合には public と解釈されます。
| アクセス修飾子 | 同一クラス | 派生クラス | すべて |
|---|---|---|---|
| public | 〇 | 〇 | 〇 |
| protected | 〇 | 〇 | × |
| private | 〇 | × | × |
Delphi では、interface セクションと implementation セクションなどに分かれています。
interface セクションでは、フィールドとメソッドなどのシグネチャのみを記述し、implementation セクションでは、メソッドなどの実行コードを記述します。
変数やメソッドなどのメンバには、この3種類いずれかのアクセス修飾子を付けることができます。指定しない場合には、その前のメンバと同じであると解釈されます。先頭のメンバにも指定されていない場合は、public(コンパイル条件によっては published)となります。
| アクセス修飾子 | 同一クラス | 同一ユニット | 派生クラス | すべて |
|---|---|---|---|---|
| public | 〇 | 〇 | 〇 | 〇 |
| published(注) | 〇 | 〇 | 〇 | 〇 |
| protected | 〇 | 〇 | 〇 | × |
| private | 〇 | × | × | × |
- フィールド (メンバ変数)
- オブジェクトの状態を保持する変数です。これらを初期化することでクラスをインスタンス化します。今まで扱ってきたメソッド内で定義された変数は当該メソッド内部でしか有効ではありませんが、フィールドはクラスをインスタンス化して作ったオブジェクトが持続する限り存在します。ちなみに、今まで登場してきた変数のようにメソッド内で宣言する変数のことを「一時変数」、「ローカル変数」と呼びます。
- コンストラクタ
- 初期処理をする特殊なメソッドといえるものです。これを呼び出すことでクラスのフィールドを初期化してメモリ上にオブジェクトを展開します。メモリ上の実態をインスタンスと呼び、クラスからオブジェクトを作ることをインスタンス化と呼びます。インスタンス化するときには必ずコンストラクタが呼ばれています。
- デストラクタ (C++ など一部の言語)
- 終了処理をする特殊なメソッドといえるものです。オブジェクトが代入された変数が破棄されるなどして、どこからも参照されなくなったときに、必ず呼び出されます。
- メソッド (メンバ関数)
- オブジェクトの機能/働きが記述されています。オブジェクトを操作する方法だといえます。基本的に、フィールドにはメソッドを通してアクセスします。メソッドに記述するのはコンピュータ制御であり、オブジェクト指向というのは、オブジェクトのメソッドを通してコンピュータ制御を指示するプログラミングスタイルのことです。
2 インスタンス
クラスからオブジェクトを作ることをインスタンス化と呼び、オブジェクト固有のメモリ上のデータをインスタンスと呼びます。
クラスをインスタンス化してオブジェクトを作成するには、new キーワードを利用します。
オブジェクトの参照を代入する変数は、具体的な定数が代入されている基本データ型の変数と区別して、オブジェクト型変数と呼ばれます。例えば、String クラスから生成されたオブジェクトは String 型変数に代入可能であり、Vector クラスから生成されたオブジェクトは Vector 型変数に代入可能です。
このようにして作ったオブジェクトの private でないメソッドを利用するには次のようにします。
privateでないフィールドならば、その利用も同様です。
それでは、自動車を考えて見ましょう。「人が乗って運転して道路を走る。目的によっていろいろな仕事をする。」...といったところでしょうか。それでは自動車を Car クラスとして作成してみましょう。
Car クラスは、引数がないコンストラクタと引数がひとつのコンストラクタ、そして kind というフィールドと run というメソッドを持っています。それでは、この Car クラスのインスタンスを生成し、run メソッドを呼び出すクラスも作成してみましょう。
- 〈処理の流れ〉
- サブクラス Car のオブジェクト car を宣言、生成します。
- オブジェクト生成時、コンストラクタが実行されます。
- メソッド run を呼び出します。Car クラスの run メソッドが実行されます。
クラスをインスタンス化してオブジェクトを作成するには、2つの方法があります。
1つは静的インスタンスで、基本データ型の変数宣言と同じように宣言します。インスタンスは変数の中に生成されます。
もうひとつは動的インスタンスで、ポインタ型として変数を宣言して、new キーワードを使ってインスタンスを生成し、そのアドレスをポインタ変数に代入します。
オブジェクトの参照を代入する変数は、具体的な定数が代入されている基本データ型の変数と区別して、オブジェクト型変数と呼ばれます。例えば、string クラスから生成されたオブジェクトは string 型変数に代入可能であり、vector クラスから生成されたオブジェクトは vector 型変数に代入可能です。
このようにして作ったオブジェクトの private でないメソッドを利用するには次のようにします。
静的インスタンスの場合は、次のように記述します。
動的インスタンスの場合は、ポインター変数なので次のようになります。
privateでないフィールドならば、その利用も同様です。
静的インスタンスの場合は、
動的インスタンスの場合は、
なお、静的インスタンスの場合は、それを含む変数がスコープを外れると変数とともに削除されますが、動的インスタンスの場合は削除されませんので、明示的に delete する必要があります。
それでは、自動車を考えて見ましょう。「人が乗って運転して道路を走る。目的によっていろいろな仕事をする。」...といったところでしょうか。それでは自動車を Car クラスとして作成してみましょう。
なお、work メソッドには run メソッドにはない virtual が指定されています。これは、後ほど説明するポリモーフィズムを実現するためのものです。
Car クラスは、引数がないコンストラクタと引数がひとつのコンストラクタ、そして kind というフィールドと run というメソッドを持っています。それでは、この Car クラスのインスタンスを生成し、run メソッドを呼び出すクラスも作成してみましょう。
- 〈処理の流れ〉
- サブクラス Car のオブジェクト car を宣言、生成します。
- オブジェクト生成時、コンストラクタが実行されます。
- メソッド run を呼び出します。Car クラスの run メソッドが実行されます。
クラスをインスタンス化してオブジェクトを作成するには、new キーワードを利用します。
オブジェクトの参照を代入する変数は、具体的な定数が代入されている基本データ型の変数と区別して、オブジェクト型変数と呼ばれます。例えば、String クラスから生成されたオブジェクトは String 型変数に代入可能であり、Vector クラスから生成されたオブジェクトは Vector 型変数に代入可能です。
このようにして作ったオブジェクトの private でないメソッドを利用するには次のようにします。
privateでないフィールドならば、その利用も同様です。
それでは、自動車を考えて見ましょう。「人が乗って運転して道路を走る。目的によっていろいろな仕事をする。」...といったところでしょうか。それでは自動車を Car クラスとして作成してみましょう。
Car クラスは、引数がないコンストラクタと引数がひとつのコンストラクタ、そして kind というフィールドと run というメソッドを持っています。それでは、この Car クラスのインスタンスを生成し、run メソッドを呼び出すクラスも作成してみましょう。
- 〈処理の流れ〉
- サブクラス Car のオブジェクト car を宣言、生成します。
- オブジェクト生成時、コンストラクタが実行されます。
- メソッド Run を呼び出します。Car クラスの Run メソッドが実行されます。
クラスをインスタンス化してオブジェクトを作成するには、New キーワードを利用します。
オブジェクトの参照を代入する変数は、具体的な定数が代入されている基本データ型の変数と区別して、オブジェクト型変数と呼ばれます。例えば、String クラスから生成されたオブジェクトは String 型変数に代入可能であり、Vector クラスから生成されたオブジェクトは Vector 型変数に代入可能です。
このようにして作ったオブジェクトの Private でないメソッドを利用するには次のようにします。
privateでないフィールドならば、その利用も同様です。
それでは、自動車を考えて見ましょう。「人が乗って運転して道路を走る。目的によっていろいろな仕事をする。」...といったところでしょうか。それでは自動車を Car クラスとして作成してみましょう。
Car クラスは、引数がないコンストラクタと引数がひとつのコンストラクタ、そして kind というフィールドと run というメソッドを持っています。それでは、この Car クラスのインスタンスを生成し、run メソッドを呼び出すクラスも作成してみましょう。
- 〈処理の流れ〉
- サブクラス Car のオブジェクト car を宣言、生成します。
- オブジェクト生成時、コンストラクタが実行されます。
- メソッド Run を呼び出します。Car クラスの Run メソッドが実行されます。
クラスをインスタンス化してオブジェクトを作成するには、new キーワードを利用します。
Javascript は、変数の型がありませんので、基本データ型でも、オブジェクト型でも、同じ変数に代入可能です。
このようにして作ったオブジェクトのメソッドを利用するには次のようにします。
フィールドも同様です。
それでは、自動車を考えて見ましょう。「人が乗って運転して道路を走る。目的によっていろいろな仕事をする。」...といったところでしょうか。それでは自動車を Car クラスとして作成してみましょう。
Car クラスは、コンストラクタと run というメソッド、そして kind というフィールドを持っています。それでは、この Car クラスのインスタンスを生成し、run メソッドを呼び出してみましょう。
- 〈処理の流れ〉
- サブクラス Car のオブジェクト car を宣言、生成します。
- オブジェクト生成時、コンストラクタが実行されます。
- メソッド run を呼び出します。Car クラスの run メソッドが実行されます。
クラスをインスタンス化してオブジェクトを作成するには、new メソッドを呼び出します。
(必ずしも、new である必要はないんですが、ここでは new にしておきます。)
Perl は、変数の型がありませんので、基本データ型でも、オブジェクト型でも、同じ変数に代入可能です。
このようにして作ったオブジェクトのメソッドを利用するには次のようにします。
フィールドも同様です。
それでは、自動車を考えて見ましょう。「人が乗って運転して道路を走る。目的によっていろいろな仕事をする。」...といったところでしょうか。それでは自動車を Car クラスとして作成してみましょう。
Car クラスは、コンストラクタと run というメソッド、そして kind というフィールドを持っています。それでは、この Car クラスのインスタンスを生成し、run メソッドを呼び出してみましょう。
- 〈処理の流れ〉
- サブクラス Car のオブジェクト car を宣言、生成します。
- オブジェクト生成時、コンストラクタが実行されます。
- メソッド run を呼び出します。Car クラスの run メソッドが実行されます。
クラスをインスタンス化してオブジェクトを作成するには、new メソッドを呼び出します。
Ruby は、変数の型がありませんので、基本データ型でも、オブジェクト型でも、同じ変数に代入可能です。
このようにして作ったオブジェクトのメソッドを利用するには次のようにします。
フィールドも同様です。
それでは、自動車を考えて見ましょう。「人が乗って運転して道路を走る。目的によっていろいろな仕事をする。」...といったところでしょうか。それでは自動車を Car クラスとして作成してみましょう。
Car クラスは、コンストラクタと run というメソッド、そして kind というフィールドを持っています。それでは、この Car クラスのインスタンスを生成し、run メソッドを呼び出してみましょう。
- 〈処理の流れ〉
- サブクラス Car のオブジェクト car を宣言、生成します。
- オブジェクト生成時、コンストラクタが実行されます。
- メソッド run を呼び出します。Car クラスの run メソッドが実行されます。
クラスをインスタンス化してオブジェクトを作成するには、単にクラスを呼び出します。
Python は、変数の型がありませんので、基本データ型でも、オブジェクト型でも、同じ変数に代入可能です。
このようにして作ったオブジェクトのメソッドを利用するには次のようにします。
フィールドも同様です。
それでは、自動車を考えて見ましょう。「人が乗って運転して道路を走る。目的によっていろいろな仕事をする。」...といったところでしょうか。それでは自動車を Car クラスとして作成してみましょう。
Car クラスは、コンストラクタと run というメソッド、そして kind というフィールドを持っています。それでは、この Car クラスのインスタンスを生成し、run メソッドを呼び出してみましょう。
- 〈処理の流れ〉
- サブクラス Car のオブジェクト car を宣言、生成します。
- オブジェクト生成時、コンストラクタが実行されます。
- メソッド run を呼び出します。Car クラスの run メソッドが実行されます。
クラスをインスタンス化してオブジェクトを作成するには、単にクラスを呼び出します。
Javascript は、変数の型がありませんので、基本データ型でも、オブジェクト型でも、同じ変数に代入可能です。
このようにして作ったオブジェクトのメソッドを利用するには次のようにします。
フィールドも同様です。
それでは、自動車を考えて見ましょう。「人が乗って運転して道路を走る。目的によっていろいろな仕事をする。」...といったところでしょうか。それでは自動車を Car クラスとして作成してみましょう。
Car クラスは、コンストラクタと run というメソッド、そして kind というフィールドを持っています。それでは、この Car クラスのインスタンスを生成し、run メソッドを呼び出してみましょう。
- 〈処理の流れ〉
- サブクラス Car のオブジェクト car を宣言、生成します。
- オブジェクト生成時、コンストラクタが実行されます。
- メソッド run を呼び出します。Car クラスの run メソッドが実行されます。
クラスをインスタンス化してオブジェクトを作成するには、new キーワードを利用します。
オブジェクトの参照を代入する変数は、具体的な定数が代入されている基本データ型の変数と区別して、オブジェクト型変数と呼ばれます。例えば、string クラスから生成されたオブジェクトは string 型変数に代入可能であり、Array クラスから生成されたオブジェクトは Array 型変数に代入可能です。
このようにして作ったオブジェクトの private でないメソッドを利用するには次のようにします。
privateでないフィールドも同様です。
それでは、自動車を考えて見ましょう。「人が乗って運転して道路を走る。目的によっていろいろな仕事をする。」...といったところでしょうか。それでは自動車を Car クラスとして作成してみましょう。
Car クラスは、コンストラクタと run というメソッド、そして kind というフィールドを持っています。それでは、この Car クラスのインスタンスを生成し、run メソッドを呼び出してみましょう。
- 〈処理の流れ〉
- サブクラス Car のオブジェクト car を宣言、生成します。
- オブジェクト生成時、コンストラクタが実行されます。
- メソッド run を呼び出します。Car クラスの run メソッドが実行されます。
クラスをインスタンス化してオブジェクトを作成するには、クラス名() を実行します。
オブジェクトの参照を代入する変数は、具体的な定数が代入されている基本データ型の変数と区別して、オブジェクト型変数と呼ばれます。例えば、String クラスから生成されたオブジェクトは String 型変数に代入可能であり、Array クラスから生成されたオブジェクトは Array 型変数に代入可能です。
このようにして作ったオブジェクトの private でないメソッドを利用するには次のようにします。
privateでないフィールドも同様です。
それでは、自動車を考えて見ましょう。「人が乗って運転して道路を走る。目的によっていろいろな仕事をする。」...といったところでしょうか。それでは自動車を Car クラスとして作成してみましょう。
Car クラスは、コンストラクタと run というメソッド、そして kind というフィールドを持っています。それでは、この Car クラスのインスタンスを生成し、run メソッドを呼び出してみましょう。
- 〈処理の流れ〉
- サブクラス Car のオブジェクト car を宣言、生成します。
- オブジェクト生成時、コンストラクタが実行されます。
- メソッド run を呼び出します。Car クラスの run メソッドが実行されます。
クラスをインスタンス化してオブジェクトを作成するには、単にクラスを呼び出します。
Python は、変数の型がありませんので、基本データ型でも、オブジェクト型でも、同じ変数に代入可能です。
このようにして作ったオブジェクトのメソッドを利用するには次のようにします。
フィールドも同様です。
それでは、自動車を考えて見ましょう。「人が乗って運転して道路を走る。目的によっていろいろな仕事をする。」...といったところでしょうか。それでは自動車を Car クラスとして作成してみましょう。
Car クラスは、コンストラクタと run というメソッド、そして kind というフィールドを持っています。それでは、この Car クラスのインスタンスを生成し、run メソッドを呼び出してみましょう。
- 〈処理の流れ〉
- サブクラス Car のオブジェクト car を宣言、生成します。
- オブジェクト生成時、コンストラクタが実行されます。
- メソッド run を呼び出します。Car クラスの run メソッドが実行されます。
クラスをインスタンス化してオブジェクトを作成するには、単にクラスを呼び出します。
Python は、変数の型がありませんので、基本データ型でも、オブジェクト型でも、同じ変数に代入可能です。
このようにして作ったオブジェクトのメソッドを利用するには次のようにします。
フィールドも同様です。
それでは、自動車を考えて見ましょう。「人が乗って運転して道路を走る。目的によっていろいろな仕事をする。」...といったところでしょうか。それでは自動車を Car クラスとして作成してみましょう。
Car クラスは、コンストラクタと run というメソッド、そして kind というフィールドを持っています。それでは、この Car クラスのインスタンスを生成し、run メソッドを呼び出してみましょう。
- 〈処理の流れ〉
- サブクラス Car のオブジェクト car を宣言、生成します。
- オブジェクト生成時、コンストラクタが実行されます。
- メソッド run を呼び出します。Car クラスの run メソッドが実行されます。
クラスをインスタンス化してオブジェクトを作成するには、new キーワードを利用します。
オブジェクトの参照を代入する変数は、具体的な定数が代入されている基本データ型の変数と区別して、オブジェクト型変数と呼ばれます。例えば、String クラスから生成されたオブジェクトは String 型変数に代入可能であり、Vector クラスから生成されたオブジェクトは Vector 型変数に代入可能です。
このようにして作ったオブジェクトの private でないメソッドを利用するには次のようにします。
privateでないフィールドならば、その利用も同様です。
それでは、自動車を考えて見ましょう。「人が乗って運転して道路を走る。目的によっていろいろな仕事をする。」...といったところでしょうか。それでは自動車を Car クラスとして作成してみましょう。
Car クラスは、引数がないコンストラクタと引数がひとつのコンストラクタ、そして kind というフィールドと run というメソッドを持っています。それでは、この Car クラスのインスタンスを生成し、run メソッドを呼び出すクラスも作成してみましょう。
- 〈処理の流れ〉
- サブクラス Car のオブジェクト car を宣言、生成します。
- オブジェクト生成時、コンストラクタが実行されます。
- メソッド run を呼び出します。Car クラスの run メソッドが実行されます。
クラスをインスタンス化してオブジェクトを作成する方法はいくつかあります。ひとつは var キーワードによる宣言構文です。
そしてもう一つは、new 関数を利用したものです。
引数がある場合には次のように記述できます。
オブジェクトの参照を代入する変数は、具体的な定数が代入されている基本データ型の変数と区別して、オブジェクト型変数と呼ばれます。例えば、string クラスから生成されたオブジェクトは string 型変数に代入可能であり、map クラスから生成されたオブジェクトは map 型変数に代入可能です。
このようにして作ったオブジェクトのメソッドを利用するには次のようにします。自クラスのメソッドを呼び出す場合にはレシーバが必要です。
フィールドも同様です。
それでは、自動車を考えて見ましょう。「人が乗って運転して道路を走る。目的によっていろいろな仕事をする。」...といったところでしょうか。それでは自動車を Car クラスとして作成してみましょう。
Car クラスは、引数がないコンストラクタと引数がひとつのコンストラクタ、そして kind というフィールドと run というメソッドを持っています。それでは、この Car クラスのインスタンスを生成し、run メソッドを呼び出すクラスも作成してみましょう。
- 〈処理の流れ〉
- サブクラス Car のオブジェクト car を宣言、生成します。
- オブジェクト生成時、コンストラクタが実行されます。
- メソッド run を呼び出します。Car クラスの run メソッドが実行されます。
クラスをインスタンス化してオブジェクトを作成するには、new キーワードを利用します。
オブジェクトの参照を代入する変数は、具体的な定数が代入されている基本データ型の変数と区別して、オブジェクト型変数と呼ばれます。例えば、String クラスから生成されたオブジェクトは String 型変数に代入可能であり、Vector クラスから生成されたオブジェクトは Vector 型変数に代入可能です。
このようにして作ったオブジェクトの private でないメソッドを利用するには次のようにします。
privateでないフィールドならば、その利用も同様です。
それでは、自動車を考えて見ましょう。「人が乗って運転して道路を走る。目的によっていろいろな仕事をする。」...といったところでしょうか。それでは自動車を Car クラスとして作成してみましょう。
Car クラスは、引数がないコンストラクタと引数がひとつのコンストラクタ、そして kind というフィールドと run というメソッドを持っています。それでは、この Car クラスのインスタンスを生成し、run メソッドを呼び出すクラスも作成してみましょう。
- 〈処理の流れ〉
- サブクラス Car のオブジェクト car を宣言、生成します。
- オブジェクト生成時、コンストラクタが実行されます。
- メソッド run を呼び出します。Car クラスの run メソッドが実行されます。
クラスをインスタンス化してオブジェクトを作成するには、constructor として定義されたメソッドを利用します。メソッド名は何でも構わないのですが、Create とするのが慣例になっています。
オブジェクトの参照を代入する変数は、具体的な定数が代入されている基本データ型の変数と区別して、オブジェクト型変数と呼ばれます。例えば、string クラスから生成されたオブジェクトは string 型変数に代入可能であり、TList クラスから生成されたオブジェクトは TList 型変数に代入可能です。
このようにして作ったオブジェクトの private でないメソッドを利用するには次のようにします。
privateでないフィールドならば、その利用も同様です。
それでは、自動車を考えて見ましょう。「人が乗って運転して道路を走る。目的によっていろいろな仕事をする。」...といったところでしょうか。それでは自動車を Car クラスとして作成してみましょう。
Car クラスは、引数がないコンストラクタと引数がひとつのコンストラクタ、そして kind というフィールドと run というメソッドを持っています。それでは、この Car クラスのインスタンスを生成し、run メソッドを呼び出すクラスも作成してみましょう。
- 〈処理の流れ〉
- サブクラス Car のオブジェクト car を宣言、生成します。
- オブジェクト生成時、コンストラクタが実行されます。
- メソッド run を呼び出します。Car クラスの run メソッドが実行されます。
実行結果です。
自動車が走る。