見出し画像

これを見ればJava言語が理解できます

あなたは神様です。
あなたはJavaという言語を駆使して、この世界にモノを作ることが出来ます。
(逆に言えば、あなたが何もしなければ世界に何も生まれません)
そのモノとは、「何か数字1つ」かもしれませんし、「何かの数字を2つ渡したら足し算して返してくれるヤツ」かもしれませんし、「人」であるかもしれません。
この「モノ」、この「何か」を「オブジェクト」と言います。
(これはJavaそのものを作った、あなたよりもっと上位の神様がそう決めました/実際は更に昔の別の言語を作った神様かもしれませんが詳細割愛)
(ちなみに「この世界にあるモノ」がオブジェクトなので、クラスと変数はオブジェクトですが、プロジェクトや開発環境は「この世界自身」と言えるのでオブジェクトじゃないです。多分。)

さて、ある日あなたは「Human(人)」というオブジェクトを作りたいと思いました。
これはあなたが仕事でそう言われたからかもしれないし、参考書にそう書いてあったからもしれないし、あなた自身が必要としていたからかもしれません。
理由はどうあれ、あなたは世界に「Human」を作る必要があったのです。
「Human」とはどういうオブジェクトでしょうか。
とりあえずここでは以下の特徴を持っていることにします。
・好きな数だけ作れる
・固有の名前を持っている
・「お前の名は?」と聞いたら、「わたしの名前は〇〇です。」と自分の名を答える
(実際は、あなたが必要だと思う特徴を決めていいです。これを設計と言います)
Humanの特徴が決まりました。
神様はさっそくHumanオブジェクトを作ろうとしますが、前述の通り、この世界ではJavaという言語を使う必要があります。
Javaの創造神はこう言っています。
「オブジェクトを作りたいなら、まずはその特徴を書いたクラスを作りなさい。クラスは設計図のようなものです。クラスを元にオブジェクトは作られるのです」
創造神には逆らえないので、あなたはそれに従います。
「出でよ、Humanクラス」
public class Human{ }
出来ました。
Humanの特徴の内、「好きな数だけ作れる」は神様の能力なので一旦置いておきます。
あと必要なのは「固有の名前」です。なのでクラスにpublic String name;という変数を追加しました。
「名前を聞いたら~」は「動作」なのでメソッドです。なのでクラスにpublic String TellName() { return "わたしの名前は" + name + "です。"; }というメソッドを追加しました。
何故か? それが必要だと決めたからです。

これでHumanクラスが作れました。
ではようやくHumanオブジェクトを作成します。
とりあえず「太郎」「花子」を作ることにしましょう。mainメソッドに以下を書いて実行です。
new Human();
new Human();
おめでとう、これでこの世界に2つのHumanオブジェクトが生まれました。
……でも待ってください、これではどちらが太郎でどちらが花子かわかりません。
なので神様にしか見えない箱に彼らを入れましょう。
Human taro = new Human();
Human hanako = new Human();
これでどちらか区別出来るようになりました。taroに入っているHumanが太郎、hanakoに入っているHumanが花子です。
では太郎に名前を聞いてみましょう。
あなたは太郎に「お前の名は?」と問いました。つまりtaro.TellName()を実行するということです。結果は……わたしの名前はです。です。おっと、名前部分が入っていませんね。
なぜなら太郎は変数taroに入っているだけで、まだ名前が与えられていない(=nameが"")なのです。
なのでtaro.name = "太郎";と太郎の名前を決めてやります。
その後改めてtaro.TellName()をすれば「自分のオブジェクトの固有の名前を返す=自分のクラスのnameの値を返す」となり、わたしの名前は太郎です。と無事に返って来るようになります。
花子でも同じことをすれば同じようになります。
太郎とは同じクラスを元に出来た同類ではありますが、taroとhanakoは別のオブジェクトなので、hanako.name = "花子";としても、taro.nameは太郎のままです。
あなたは必要な分だけ、Humanオブジェクトを増やすことが出来ます。
要らなくなったら破棄することも出来ます。
hanako.name = "ジョセフィーヌ";とデータを変更することも出来ます。
そして「この機能を追加する必要があるな」と思ったら、クラスに追記すれば全てのHumanクラスがそれを持ちます。
名前を聞いた時の反応をMy name is 〇〇.にしたければ、HumanクラスのTellNameメソッドを修正するだけで済みます。
あなたの必要に応じて、必要な分だけオブジェクトと、その為のクラスを作ってください。
何はともあれ、こうしてあなたは当初の目標「Humanオブジェクトを作る」を達成したのでした。
なお、この「クラスから作ったオブジェクト」のことを「インスタンス」と呼びます。
これはJava神が決めた名前です。
「オブジェクト」は前述の通り範囲が広すぎるので、その中でもクラスから作成されたオブジェクトをインスタンスと呼ぶのです。

ちなみにmainメソッドですが、こいつはJava神によって「プログラムが起動したら、まず最初にpublic static void main(String args[])ってメソッドを呼ぶ」と決められているメソッドです。
手続きどうのこうのとありますが、とりあえず
『「Java神により勝手に呼び出されるメソッドを持ってるクラス」と「それ以外のクラス」があるんやで』
『どっちも「クラス」という意味では同じやで』という点だけ踏まえればいいかと思います。

この記事が気に入ったらサポートをしてみませんか?