ログインしてさらにmixiを楽しもう

コメントを投稿して情報交換!
更新通知を受け取って、最新情報をゲット!

TUT Programing Techniqueコミュの[Java]第八回課題

  • mixiチェック
  • このエントリーをはてなブックマークに追加
一ヶ月近くも時間開けてしまいました…。
すみません。ちょっと忙しかった物で。。

第六回課題分もありますが、こちらの方が大切なものですので、こちらから先に更新したいと思います。

コメント(9)

さて、第八回講義内容ですが、継承についてでした。
継承とはextendsキーワードを用いて、現存のコードを再度利用したり、似たような動作をするオブジェクトをいくつか作成したいときの効率を良くしてくれる便利なものです。
プログラムを再利用する事で、開発生産性の向上において大きな役割を担っています。

実際に例を挙げて見ましょう。

Humanというクラスがあります。
class Human {
    String name = "";
    int age   = 0;
    int arms  = 2;
    int legs  = 2;
    int head  = 1;

    int food  = 100;
    int HP   = 50;

    public int eat() {
        food--;
        HP++;
        return 0;
    }
}
名前は無く、年もありませんが、足が2本、手も2本、頭は1つあるという情報を持っています。
人間おなかも空きますし、ご飯を食べます。
ですからそういった行動を取らせるには命令群、メソッドを作ってやる訳です。
ここまでは継承と関わりの殆ど無い事ですが、これからが本題です。

Tomというクラスがを作るとします。
今作りたいTomは何かというと人間の情報、つまり、「足を2本持っていたり、手を2本持っていたり、頭が一個あったり、物を食べたりする」という情報を持ったクラスだとします。
先ほど作ったHumanクラスにはそういった情報が書かれていました。
しかし、それはTomではありません。名前もありませんし、年もありません。
決まった行動しかせず、人間味がありません。

そこで継承を使うのです。
Tomクラスは以下のようにするとします。
class Tom extends Human {
    int power = 20;
    public Tom(){
        name    = "Tom Ford";
        age     = 19;
    }

    public int Play_BaceBall(){
        power   += 10;
        HP    -= 10;
        return 0;
    }
}

extends キーワードは継承する先のクラスを指定します。
継承する先のクラスを「スーパークラス」と呼びます。
また、継承を行う、今でしたらTomクラスに相当するクラスを「サブクラス」と呼びます。
ちょっと言葉に迷わされそうなのですが、「サブクラス」と言われたら補助的な端っこの方に膝を抱えて座ってそうなイメージを受けるかもしれないですが(自分だけか)、実はスーパークラスから色々と吸い取って自分の血肉としている強い奴なんです。

ちょっと話がそれましたが、解説を続けます。
今まではクラスが二つあれば、そのクラスの中で宣言した変数やメソッドはそのクラスのなかでしか使えませんでした。
例:

class report_001 extends Applet{
    public void init(){
        x++;    // これは出来ない。
        retun_x(); // これも出来ない。
    }
}

class Car{
    int x = 0;
    int y = 10;
    public void return_x(){
        return x;
    }
}

しかし、継承を使うと別のクラスに書いた内容を、オブジェクトを生成(Car car1 = new Car();の様に)しなくても変数やメソッドを呼び出すことが出来るのです。
最終的にはこういった感じのイメージで良いと、今の所自分は思います。
確実ではないので色々と触ってみて試してみて下さい。


class Tom {
    String name = "";
    int age   = 0;
    int arms  = 2;
    int legs  = 2;
    int head  = 1;

    int food  = 100;
    int HP   = 50;
    int power = 20;

    public Tom(){
        name    = "Tom Ford";
        age     = 19;
    }

    public int eat() {
        food--;
        HP++;
        return 0;
    }

    public int Play_BaceBall(){
        power   += 10;
        HP    -= 10;
        return 0;
    }
}



ちなみに最後に補足をつけると、サブクラスでもスーパークラスでも同名のメソッドやコンストラクタが存在して(宣言されて)いた場合、サブクラスのメソッドやコンストラクタが優先されます。
これでどのメソッドやコンストラクタが呼び出されているのか、いくつも継承を重ねていると分かりにくくなるので注意してください。。
これを解決するには開発環境をEclipseを使う様にするか、interfaceを使用すると良いですね。
interfaceに関してはそのうち授業でやるんじゃないでしょうか?
結構便利なのでお楽しみにどうぞ。
それではお疲れ様でした。
たとえば
int x=10;
とかつくっといて
    public int Get_Nazuna(){
        return x;
    }
てやるとintの値のxが抽出されるらしいよ(´∀`*)

でも環大先生のかいた return 0;
は僕にもわからない;;
なにもかえさないってことかな(*´・ω・)?



でしゃばってすんません(´・ω・`)
あ、初めてコメントしてくれる人が現れた。
コメントしてくれる人いないと思ってたから今まで見てなかったごめん。
return 0; はC++とかDelphiとか、マシンプログラミングでよく使うんだけど、0ならTRUE、それ以外(1とか-1とか)ならFALSEって決めておいて、可笑しなことになっちゃったら0以外を、ちゃんとした処理が行われたら-1とかを返す、とかってすると便利なんです。

例:

public class test_001 extends Applet {
  int x;
  int y;
  public void init(){
    System.out.println("Start");
    System.out.println(x);
    if( PorM( 10 ) == 0 ){
      System.out.println(x);
    }
    if( PorM( -10 ) == 0 ){
      System.out.println(x);
    }
      System.out.println("End");
  }

// 引数の値が0異常なら0(TRUE)を、0以下なら-1(FALSE)を返してxを++する関数
  public int PorM( int some ){
    if( some < 0 ){
      return -1;
    }else{
      x++;
      return 0;
    }
  }
}

こんな感じで使ったりします(未テスト)。
この場合、出力結果は0、1になるはず。(多分)
うーん 説明微妙。
あ、こういえばいいか

  public int intotto(){
    System.out.println("intotto");
    return -1;
  }

と

  public void voidoddo(){
    System.out.println("voidoddo");
  }

は、同じ動きするよ。returnが0でも-1でも。
なんとなく癖でリターン返しちゃっただけなんであんまり気にしないで下さい(´・ω・`)
>>7ちょっと間違ってます すいません
TRUE,FALSEの方は正しいのでそっちでお願いします。。

ログインすると、みんなのコメントがもっと見れるよ

mixiユーザー
ログインしてコメントしよう!

TUT Programing Technique 更新情報

TUT Programing Techniqueのメンバーはこんなコミュニティにも参加しています

星印の数は、共通して参加しているメンバーが多いほど増えます。