クラスって何?

教授?
Javaのクラスって何ですか?

プログラムを入れるための「器」だと思ってください。
最初に「これはプログラムを入れる器です」と宣言することを、クラスの宣言と言います。
public class Mokemoke{
}

Mokemokeというクラスを宣言しているのですね。
何か、決まりはあるのですか?

まずは、可視性です。
可視性とは、スコープとも言いますよ。
クラスやメソッドが他のクラスから参照できるか決めるものです。

んー。
メソッドって何ですか?

プログラムの処理をまとめたものですよ。
例えば、
public static void main(String[]args)
というのもメソッドの一種です。

前回、出てきたヤツですね。

前回説明していたのは、メインメソッドというものになります。
話を戻しますが、可視性について最初のうちは覚えるということも大事ですね。
public | アクセス制限は特になく、すべてのクラスから参照可能 |
protected | 同じパッケージと子クラスから参照可能 |
指定なし | 同じパッケージからのみ参照可能 |
private | 自クラスからのみ参照可能 |

ということは、さっきのMokemokeクラスは、publicだったのですべてのクラスから参照可能というわけですね。

そうなります。
ちなみに、クラスの名前は、大文字で始めることになっていますので、注意してください。
・クラスの宣言
【可視性】 class 【クラス名】{
}
・クラス名の最初の文字は大文字にする
【変数の宣言】クラスの中身を作る

ところで、プログラムはいつ動くのですか?

Mokemokeクラスのことですね。
もう少し手間がかかりますよ。
変数を宣言しましょう。

ちなみに、Mokemokeとはなんですか?

Mokemokeはもけもけです。
もけもけは、教授の乗り物です。
白くてもけもけしたヤツです。
では、変数の宣言です。
public class Mokemoke{
public String color;
public String size;
private String gainSpeed;
}

変数にも決まりがあるのですか?

もちろん、あります。
・変数の宣言
【可視性】【型】【変数名】
例)private String speed
・変数名の最初の文字は小文字にします

ところで、変数gainSpeedだけは可視性がprivateですよね。
何か理由があるのですか?

ええ、colorやsizeは見た目の問題なので、他から見えても問題ありません。
gainSpeedは、見えるものではないのでprivateにしてあります。
教授は安全運転なのですよ?

なるほど。
コンプライアンス的に伏せておいた方が良い情報なのですね。
【メソッドの宣言】クラスの中身を作る

次はメソッドを作っていきますよ。

これにも決まりがあるのですか?

もちろん、ありますよ。
・メソッドの宣言
【可視性】【戻り値の型】【メソッド名】【引数】
・戻り値が無い場合は、void と書きます

最初は、スピードからです。

教授?
安全運転でお願いします。
public void speed(){
//スピードを出す
System.out.println(gainSpeed);
}

シンプルに変数gainSpeedの中身を表示するだけですよ。

スピードメーターみたいな感じですね。

次はしゃべらせてみましょう。

しゃべるという動きを表現するのですね。
public void speak(String words){
//話す
System.out.println(words + "もけもけ");
}

さらに、飛ばしてみましょう。

なんと!
もけもけは飛べるのですか?!
public String takeOff(){
//飛ぶ
String fly = "もけもけ飛びます!";
return fly;
}

これで飛びますよ?

初めて、戻り値がString(文字列)になりましたね。

そうですね。
変数flyをreturnで返しますよ。

この変数flyの可視性は何ですか?
指定なしなのですか?

メソッドの中の変数は、そのメソッドの中でしか使えませんので、可視性は特にありません。
クラスの変数を「メンバ変数」、メソッドの変数を「ローカル変数」と言います。
・メソッド名の最初の文字は小文字にします
・引数は、型と引数名をセットにします(複数の場合は「,」(カンマ)で区切ります)

ここまでよろしいですか?

一応、プログラムを書きましたよ。
public class Mokemoke{
public String color;
public String size;
private String gainSpeed;
public void speed(){
//スピードを出す
System.out.println(gainSpeed);
}
public void speak(String words){
//話す
System.out.println(words + "もけもけ");
}
public String takeOff(){
//飛ぶ
String fly = "もけもけ飛びます!";
return fly;
}
}
【オブジェクト化】インスタンス化する【new】

それでは、もけもけを召喚しましょう。

召喚? 呼び出すのですか?

ええ、実体化させますよ。
その前にコンストラクタの使い方を学びましょう。

コンストラクタとは何ですか?

インスタンス化する時に、必ず必要な情報はコンストラクタで渡すのです。
もけもけの色とかサイズですね。

そういえば、そんな変数も宣言しましたね。

次のように入力しますよ。
pubulic Mokemoke(String size,String color){
this.size = size;
this.color = color;
}

さっきのコードと組み合わせてみました。
public class Mokemoke{
public String color;
public String size;
private String gainSpeed;
pubulic Mokemoke(String color,String size){
this.color = color;
this.size = size;
}
public void speed(){
//スピードを出す
System.out.println(gainSpeed);
}
public void speak(String words){
//話す
System.out.println(words + "もけもけ");
}
public String takeOff(){
//飛ぶ
String fly = "もけもけ飛びます!";
return fly;
}
}

ちなみに、thisというのは、メンバ変数を参照するときの書き方になります。
つまり、this.color = colorのthisが付いている方のcolorという変数は、public String colorの方のcolorを示していますよ。

同じ変数名だから混同しないように、thisをつけるということですね。

では、もけもけ召喚です。
public class Main{
pubulic static void main(String[]args}{
Mokemoke mokemoke = new Mokemoke("白っぽい","大きい");
}
}


思ったより、デカい。
話すこともできるのですか?

話す時はこのようにしますよ。
public class Main{
pubulic static void main(String[]args}{
Mokemoke mokemoke = new Mokemoke("白っぽい","大きい");
Mokemoke.speak("ボクを呼びましたか?");
}
}

ちなみに、飛ぶときはこうします。
public class Main{
pubulic static void main(String[]args}{
Mokemoke mokemoke = new Mokemoke("白っぽい","大きい");
Mokemoke.takeOff();
}
}

あ、どっか飛んで行った!
まあ、いいか。
