クラスって何?
教授?
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();
}
}
あ、どっか飛んで行った!
まあ、いいか。