Javaのメイン、オブジェクト指向に突入。 Obj指向はどんなかんぎか考えてみると、
やまださんに収支計算させて、必要に応じて結果きいて たなかさんにタイピングさせて やましたさんに広告を考えさせて
とか、あらゆるクラスに作業を分担させて、相互に参照していくかんぎかのう。
クラスというのは、上の例でいくと、 やまださんというのは、収支計算するやつ たなかさんはキーパンチャー やましたさんは広告キャッチフレーズ考える
とかそういう属性をかいてるもんみたいなかんぎらしい。 それをインスタンス化というのをしたら、オブジェクトができる。 収支計算でも、インスタンス化したあとなら、A社B社なんでもいいし、 広告でも自動車用とかおかしとかいろいろかわる。
でもやってることはおなぎというかんぎかのう。
つまりJavaプログラミングの神髄は、 プログラムの中でどういうオブジェクトが必要か考えて、 その共通の性質ごとにクラスをつくるということじゃのう。
たとえば、 エンギンオブジェクトは、ガソリンを爆発させてパワーにかえるという性質にして、 シャフトオブジェクトは、パワーを回転にするという性質にして、 それを組み合わせてできるもんは車になったり、船のプロペラになったり飛行機になるとかそんなかんぎ?
定義しないとそりゃ性質もくそもできんわな。
とりあえず、自動車クラスでは、 属性 エンギン 速度 操作 スピードアプ ダウン
としよう。
クラスの属性を表す変数。intとかdoubleでかく。 特に今までのあれとかわらん。 a+b計算するクラスなら、int a;,int b;みたいにしていけばいいようだ。
メソッドがなにかは振り返るとして、まあつまり操作をかくときにつかうな。
属性はフィールド変数、操作はメソッドでかく。併せてクラスのメンバというらしい。
ちなみにこうかく
class クラス名 { フィールド変数 メソッド }
"class"が定義するための命令。
自動車クラスを書くとだね
public class Car { //PublicなCarクラスです int speed;//speedという整数の変数を宣言 int speedUp() {//speedUpというメソッドを定義 speed = speed + 10;//speedはspeed+10です return speed;//上のspeedを戻らせる } int speedDown() {//speedDownメソッド定義 speed = speed - 10;//speedはspeed-10ですよ if ( speed < 0){//0より小さいときは speed = 0;//speedは0です。 } return speed;//speedに戻らせる } }
まあつまり、まずcarクラスですよーといい、 speedというフィールド変数きめて、 speed Up Downのメソッドつくってチョン ってことだな。
自動車クラスからオブジェクトをつくる、すなわちインスタンス化はこうかく
new クラス名();
このカッコは前々から気になってるがなんだろうな。
作る数だけ書くこと。
つまり、インスタンス化することにより、わざわざ何個も命令かかなくても、これしたいならこのクラスみたいなことになるわけだな。
ちなみにクラスつくると、そのときにデータ型がつくられるらしい。 それは参照型とよばれて、その変数は参照変数というそうだ。
Car carObj = new Car();
とかくと、carObjがポータルみたいになって、インスタンス化されたクラスにいくというかんぎらしい。
ちなみに、オブジェクトさわるには
(new Car()).speed = 0;
で、Carオブジェクトのspeedに0がはいるが、普通は参照変数を通じてやるらしい。
Car carObj = new Car(); carObj.speed = 0;
つまり、参照変数carObjつくって、 carObj.speed に 0いれるぜ
というかんぎ。
speedupメソッドならcarObj.speedup(); とかにする。
車のやつでいくと、とりあえず車というのは速度を上げたり下げたりするものというかんぎである。で、エンギンをどう定義するか。
とりあえずエンギンは、排気量という属性があって、それから動力を取り出すというかんぎにするとする。
とりあえず排気量という変数と、それを1/10してパワーを取り出すメソッドをつくる。
%t;public class Engine {
int displacement =1500; int getPower(){ return displacement / 10; } }
こんなかんぎだろう。
そして、Carにエンギンの定義を増やすには、フィールド変数を参照変数をいれてやればいいそうだ。
Engine engine;
こんんかんぎ。
クラスで定義するもんでは、コンストラクタというものがある。 戻り値を持たないクラス名と同じ名前のメソッドで、クラスからオブジェクトつくるときに読み出される(そりゃそうだ)
なお、今まで書いてないけど動いてるのは、定義してない時だけ勝手になんもしないコンストラクタが作られていたからだそうで。ちなみに引数があるコンストラクタを定義したら、それはもちろん作られません。何か知らんが特に何もなくても絶対作った方が良いらしい。
ちなみに、Car.classに引数がないコンストラクタをつくるとこうなる
Car() { speed = 0; engine = new Engine(); }
これで、スピードを0と定義して、engineというオブジェクトをつくります。
ちなみにコンストラクタに値を与えておくこともできる。
Car(int speed) { this.speed = speed; engine = new Engine(); }
thisって何なんだとか考えてはいけないようだ。注釈なさすぎ。 で、(int speed)に入れる数値は、オブジェクト作るときに書くらしい。
new classname (引数) ;
となる。Carspeedにつねに10入れる場合は
Car carObj = new Car(100);
とかくそうで。よくわかんえ。