ポリモフィズムとは何か、使い方やメリットをコードで解説【Java入門講座】4-7 抽象クラスとポリモーフィズム

Sdílet
Vložit
  • čas přidán 25. 06. 2024
  • 【初心者向けJava入門講座】4-7 抽象クラスとポリモフィズム の授業動画です。
    経験者でも理解が難しい抽象クラスとポリモフィズムについて、考え方や使うメリットを基本から丁寧に解説しました。
    ⭐無料&楽しく勉強できる場所を作りたい!そんな想いで授業動画を作ってます😁
    →チャンネル登録/高評価/周りにオススメ で応援してもらえると嬉しいです✨✨
    🌸チャンネル登録はこちら!
    czcams.com/users/SekaChan?su...
    📙授業ノートはこちら!
    bit.ly/3s72p0D
    📄プログラムはこちら!
    bit.ly/3GMTkxX
    👀関連動画はこちら!
    ▼前の動画
    • 型変換できる条件、自動とキャストの違いとその...
    ▼次の動画
    • インタフェースの実装方法やメリット、抽象クラ...
    ▼授業動画の一覧
    • 独学でJavaプログラミングをマスター!初心...
    💡チャプター
    00:00 オープニング
    00:17 今回のテーマ
    01:30 2種類の継承
    06:31 抽象クラス
    11:27 サンプルプログラム
    17:06 ポリモフィズム
    17:54 ポリモフィズムのメリット
    🙋‍♂️プロフィール
    【せかチャン 菅原】
    ・東京工業大学大学院 情報理工学研究科 卒業
    ・大学生、大学院生のときに5年半塾講師
    ・IT研修講師として情報技術、プログラミングのセミナーを企画・実施
    ・Oracle社より「Instructor of the Year(満足度日本一)」「Java講師賞」を4年連続受賞
    「分かった!」と言ってもらえる瞬間、勉強を楽しいと感じてもらえる瞬間が好きです。
    フリーラーニング(無料で学べる場)を広げたいと思ってCZcamsをはじめました。
    一緒に楽しく勉強&成長していきましょう!
    📳Twitter
    / sekachanit
    🎵音源提供
    DOVA-SYNDROME
    dova-s.jp/
    ※動画によっては使用していない場合があります
    #Java #プログラミング #せかチャンのJava入門講座 #せかチャン

Komentáře • 86

  • @user-ec2wc2bv1t
    @user-ec2wc2bv1t Před 8 měsíci +6

    文字だけを読み上げる教授の授業よりイメージがしやすくてちゅき

    • @SekaChan
      @SekaChan  Před 8 měsíci +3

      にゃのもーさん、コメントありがとうございました!
      ここは特に難しいところなので、イメージをつかんでもらえてたら嬉しいです😄

  • @aaacc8775
    @aaacc8775 Před 9 měsíci +5

    毎回とてもわかりやすくてありがたいです。
    字もとても綺麗ですね!

    • @SekaChan
      @SekaChan  Před 9 měsíci

      aaa ccさん、コメントありがとうございました!
      ここは難しい内容なので、わかりやすいって感じてもらえて良かったです。
      字は気持ちを込めて書いてます!

  • @HitoshiSHIMURA
    @HitoshiSHIMURA Před měsícem +3

    菅原先生の説明はいつもとても分かりやすい。2年前の動画が今でもとても役立ちます。素晴らしい。いつもありがとうございます。

    • @SekaChan
      @SekaChan  Před měsícem +1

      ありがとうございます😄
      この動画を公開したとき、チャンネル登録者が50人くらいしかいなかったんですよね。
      ここまで続けてこられたのはみんなのおかげです!

    • @HitoshiSHIMURA
      @HitoshiSHIMURA Před měsícem +1

      @@SekaChan わたしはIT業界を定年リタイヤした後、就労支援事業でIT担当の職業指導員をしていますが、Javaの学習するなら菅原先生の動画が素晴らしいから観るようにと勧めています。私自身がとても勉強になります。これから更に勉強させてもらいます。

  • @veele5114
    @veele5114 Před rokem +4

    面白い!
    プログラミングの世界が広がっていく感覚にワクワクします。

    • @SekaChan
      @SekaChan  Před rokem +2

      Ve Eleさん、コメントありがとうございました!
      抽象クラスやポリモフィズムは、入門講座の中でトップクラスに難しい内容です。
      この動画を観て面白いと感じられる人は、きっとプログラミングの素質があると思いますよ👍
      これからもその調子で楽しく勉強していってください!

  • @user-bt7yc7nl3f
    @user-bt7yc7nl3f Před měsícem +4

    自分用メモ
    継承では スーパークラスを元にサブクラスを作る
    サブクラスを元にスーパークラスを作る

  • @user-zy6lp7bp4z
    @user-zy6lp7bp4z Před 2 lety +5

    いつも勉強させて頂いております。(^^♪今後、Java Silverの傾向と対策動画もお願い致します。

    • @SekaChan
      @SekaChan  Před 2 lety +1

      にーにさん、コメントありがとうございました!
      Java Silverの対策動画ですね。シリーズ化も含めて、動画にできそうかを検討してみます🍀

  • @user-de6yf7ey7j
    @user-de6yf7ey7j Před 2 lety +7

    いつもわかりやすい動画ありがとうございます!
    もし可能でしたら
    ポリモーフィズムを使わないと今回の場合は
    どのような煩雑?なコードになるのかということを知りたいです!
    お忙しいところ申し訳ございません

    • @SekaChan
      @SekaChan  Před 2 lety +11

      堀内喬太さん、コメントありがとうございます。
      ポリモフィズムには、参照型の型変換が深く関わっています。
      そのため、「ポリモフィズムを使わない」という条件を「参照型の型変換ができない」に置き換えると、Student6クラスのコンストラクタは引数としてClubのサブクラスのオブジェクトを受け取れなくなります。
      つまり、コンストラクタが次の1つだけで良かったのが‥
      ---
      public Student6(String name, Club club){
      this.name = name;
      this.club = club;
      }
      ---
      次のようにClubのサブクラス分だけ作成する必要があります。
      ---
      public Student6(String name, TandF club){
      this.name = name;
      this.club = club;
      }
      public Student6(String name, Football club){
      this.name = name;
      this.club = club;
      }
      ---
      将来的に、サブクラスが増えたら新しくコンストラクタを作らなければならないし、コンストラクタ内の処理を変更したいときも全部のコンストラクタを修正する必要が出てきます。
      このように「呼び出されるメソッドを1つにまとめられる」のは、ポリモフィズムの大きなメリットですね。

    • @nokonokonokonokonoko
      @nokonokonokonokonoko Před 10 měsíci +2

      @@SekaChan 横からコメント失礼します。こちらの先生のご回答で長らく理解できなかったポリモフィズムが理解できました。ありがとうございます!!

  • @BUMP_OF_CHICKEN_TV
    @BUMP_OF_CHICKEN_TV Před rokem +6

    4章入ってからずっと難しい(汗)
    モコモコの登場人物が多すぎて、頭の中のイメージがモコモコだらけになってます。

    • @SekaChan
      @SekaChan  Před rokem +2

      ニコルさん、コメントありがとうございました!
      たしかに、4章は難しい内容ばかりですね💦
      5・6章は比較的理解しやすいので、復習などをしながら無理せず理解を深めていってください!

  • @user-ht2le1os1h
    @user-ht2le1os1h Před 7 měsíci +3

    動画を見ながら勉強させていただいています。
    前回の動画内容に続きかなり混乱しています。
    club class は抽象クラスでありスーパークラスだという認識をしているのですが、Student classもfinalではないためTandF classとfootball classのスーパークラスであるという認識であっていますでしょうか?

    • @SekaChan
      @SekaChan  Před 7 měsíci +3

      丸山雅士さん、コメントありがとうございました。
      たしかに、このあたりは入門講座の中で一番難しいところですね。
      「Clubクラスは抽象クラスでありスーパークラス」という認識は正しいですが、「StudentクラスもTandFクラスとFootballクラスのスーパークラス」という認識は誤りです。
      TandFクラスもFootballクラスもクラス定義に「extends Club」とあるため、これらのスーパークラスはClubクラスですね。

  • @user-ly7ql8qd2c
    @user-ly7ql8qd2c Před 10 měsíci +3

    clasの機能追加より私は中小クラスの方が理解しやすいです。トップダウンよりボトムアップするプログラムの作り方はとても面白い考え方です。

    • @SekaChan
      @SekaChan  Před 10 měsíci +1

      佐々木さん、コメントありがとうございました!
      たしかに、ボトムアップの考え方は面白いですよね。特に開発するシステムの規模が大きくなるとよくみられる考え方です。

  • @icantspeakenglish10
    @icantspeakenglish10 Před rokem +2

    4章大事

  • @user-cz8eh2mn4n
    @user-cz8eh2mn4n Před dnem

    いつも丁寧な動画を提供していただきありがとうございます。難しく感じてきたので、また質問させてください!動画内の14:34の箇所です。
    ①Student6クラスの3行目のPrivate Club clubというのはClubクラス型のclubという名前の変数と認識しておりますが正しいでしょうか。
    ② Student6クラス9行目以降のclub.displayメソッドを呼び出した際に、Clubクラス型を継承しているから、TF,FBクラスのdisplayメソッドを呼び出してもコンパイルエラーが発生しないということでしょうか?
    ※実行用クラス7行目
    stu1.display();の処理の部分です。

  • @shinyatateishi9831
    @shinyatateishi9831 Před měsícem

    いつも分かりやすい説明、ありがとうございます。
    確認視聴2度目です。1回目を終わり辺りまで見て、やはりもう一度見たくなりました。
    この回は大事だと思います。
    ***outPut*******
    名前:峰山
    部活動:陸上競技部
    ・ウォーミングアップ
    ・インターバル
    ・筋肉トレーニング
    名前:川村
    部活動:サッカー部
    ・ドリブル練習
    ・シュート練習
    ・ミニゲーム
    *****************
    個人的に分析したコメントは以下の通りです。まず
    【Club.java】
    // 抽象クラスとして作成(このあと共通部分の親玉になる)
    public abstract class Club {
    // メンバー変数として(=)
    private String name;// 部活名
    public Club(String name) {
    this.name = name;
    }
    // 定義・実装(=)なメソッド
    public void display() {
    System.out.println("部活動:" + name);
    }
    // 定義のみ(=)なメソッド
    // 抽象メソッド
    public abstract void practice();
    }
    ーーーーーーーーーーー
      ↓
    Clubクラスを継承する陸上競技部クラス
    【TandF.java】
    public class TandF extends Club {
    // コンストラクタ
    public TandF(String name) {
    // Superクラス(Clubクラス)の部活名として扱う
    super(name);
    }
    // 定義のみのメソッドにオーバーライド
    // ⇨していなかった「中身の実装」をする
    public void practice() {
    System.out.println("・ウォーミングアップ");
    System.out.println("・インターバル");
    System.out.println("・筋肉トレーニング");
    }
    }
    ーーーーーーーーーーー
    そしてもう一つ、Clubクラスを継承するサッカー部クラス
    【Football.java】
    public class Football extends Club {
    // コンストラクタ
    public Football(String name) {
    // Superクラス(Clubクラス)の部活名として扱う
    super(name);
    }
    // 定義のみのメソッドにオーバーライド
    // ⇨していなかった「中身の実装」をする
    public void practice() {
    System.out.println("・ドリブル練習");
    System.out.println("・シュート練習");
    System.out.println("・ミニゲーム");
    }
    }
    ーーーーーーーーーーー
      ↓
    継承後、陸上、サッカー両部活クラスを引数として受け取る
    生徒クラス
    【Student.java】
    public class Student {
    private String name;// 氏名
    // Clubクラスは抽象クラス
    private Club club;// Clubオブジェクト
    // コンストラクタ
    // 生徒氏名、部活オブジェクトを引数として取得
    public Student(String name, Club club) {
    this.name = name;
    this.club = club;
    }
    // 氏名+部活名表示メソッド
    public void display() {
    System.out.println("名前:" + name);
    // 部活名(Clubクラスで定義・実装済み)
    // ⇨インスタンス作成時に受け取る「部活動オブジェクト」のdisplayメソッドが反映予定
    club.display();
    }
    // 部活練習メニュー表示(Clubクラスで定義済み[実装なし])メソッド
    public void practice() {
    // 部活練習メニュー表示
    // ⇨インスタンス作成時に受け取る「部活動オブジェクト」のpracticeメソッドが反映予定
    club.practice();
    }
    }
    ーーーーーーーーーーー
      ↓
    上記クラスを人数分作ってメソッド実行させるクラスmain(String[] args)
    【StudentsSample.java】
    public class StudentsSample {
    public static void main(String[] args) {
    // それぞれの部活インスタンス生成
    TandF taf = new TandF("陸上競技部");
    Football ftb = new Football("サッカー部");
    // 生徒インスタンス生成(名前、部活インスタンス[オブジェクト]を引数として渡す)
    Student stuTaf = new Student("峰山", taf);
    Student stuFtb = new Student("川村", ftb);
    stuTaf.display();// 陸上部の生徒紹介
    stuTaf.practice();// 陸上部の練習メニュー
    stuFtb.display();// サッカー部の生徒紹介
    stuFtb.practice();// サッカー部の練習メニュー
    }
    }
    【質問】
    ここで思ったのですが、初めのクラス設計の際で想定していた綺麗な設計があるとします。
    ところが開発が継続していくにつれ、共通部分(メソッド)が各々子クラスに発生していくこともあると思います。
    その際、複数の子クラスが持つメソッドを親クラスに集約させていくことで、この技術(ポリモフィズム)を最大化させていけるのではないかと思います。
    ※単一責任の原則→DRY原則へと進んでいく。そしてKISS原則へと行ければいい。でも難題。。。
    そのためにもアジャイル開発など短期で現状把握、変更ができる開発スタイルで、クラス設計も対応できればいいのではと思います。
    ※そのリソースが割ければの話ですが。。。
    でもせっかくの技術なので大事かと思うのです。
    これはJavaに限らず全てのオブジェクト指向の言語について言えることではないかとも思っています。
    1)カード型のモデルを作成したり, 白板に UML のモデルを書いたり, 付箋紙を貼り付けるという手軽な方法
    2)UML を含む多様なモデリングテクニックを広く, 浅く用いることで多様なニーズに応える方法
    など考えますが、@SekaChanさんはどんなふうにお考えでしょうか?
    ※このコメント欄に相応しいか不明でしたが、思わず考えたので。。。(*´ω`*)

  • @ted9622
    @ted9622 Před 20 dny

    eclipceでプログラムを開いていつも授業を見るのですが日本語だけ文字化けしてしまいます
    なにか解決策はありますでしょうか

  • @megane4942
    @megane4942 Před 2 lety +5

    いつも勉強させていただいております。
    Student6クラスに関して質問させてください。
    ①String nameのStringはシステム側で用意されているクラスで
     Club clubのClubは自身で定義した抽象クラス、
     clubは陸上やサッカーのクラスをいれるための変数という認識であってますでしょうか?
    ②①の認識であっている場合、Clubのimportは行わなくてよいのでしょうか?
     (StudentクラスではClubを継承もしておらず、importもしていないのに記述してもよいのでしょうか)

    • @SekaChan
      @SekaChan  Před 2 lety +7

      meganeさん、コメントありがとうございました。
      ①→その認識でほぼ正しいですね🍀
      厳密にいうと、clubは陸上やサッカーの(クラスではなく)オブジェクトをいれるための変数です。
      ②→Clubのimportは行わなくて大丈夫です。
      ClubクラスはStudent6クラスと同じフォルダ内に入れているので、importをしなくても利用することができますね。

    • @megane4942
      @megane4942 Před 2 lety +4

      @@SekaChan丁寧なご回答ありがとうございます。
      同階層にあれば、importはしなくてよいのですね!
      そこらへんの認識があいまいだったので大変助かりました!

  • @user-sg2do5se5t
    @user-sg2do5se5t Před 5 měsíci

    抽象メソッドが無い場合でも、「abstract class クラス名」は使えますか?

  • @user-pz4tq8lq5t
    @user-pz4tq8lq5t Před 8 měsíci +3

    いつも感謝しながら動画を見ています!
    19:36で質問なのですが、 StudentクラスのスーパークラスがClubクラスなのは何故でしょうか?extendsが入ってなかったので、どうやって継承関係にしたのか気になりました。

    • @SekaChan
      @SekaChan  Před 8 měsíci +2

      にゃにゃさん、コメントありがとうございました!
      19:36のところ、テロップだけをみるとStudentクラスとClubクラスが継承関係にあるように読み取れてしまいますね‥。勘違いさせてしまってすみません🙏
      たしかに、StudentクラスとClubクラスは継承関係にないですね。
      19:36過ぎで「そのスーパークラスである」と話している「その」というのは、少し前に話した「Baseballクラス」を指していると考えてもらえたらと思います。

    • @user-pz4tq8lq5t
      @user-pz4tq8lq5t Před 8 měsíci +2

      @@SekaChan ありがとうございます!これからも菅原様の作った素晴らしい動画で勉強していきます!いつもありがとうございます!

  • @user-bx2fd8gt5c
    @user-bx2fd8gt5c Před 2 lety +6

    いつもありがとうございます。質問なのですが、public class student6のメンバ変数でCulbオブジェクトを定義していますが、オブジェクトをメンバ変数にすうというのがイメージができないのですが教えていただけますでしょうか。

    • @SekaChan
      @SekaChan  Před 2 lety +3

      基本情報学習中君さん、コメントありがとうございました。
      「オブジェクトをメンバ変数にする」というのは、例えば3-3の動画でStudentオブジェクトの図を書きました( czcams.com/video/HalozHg1LMM/video.html )が、この変数nameがclubにかわるイメージですね。
      "菅原"の文字列のところが、Clubオブジェクトのモコモコにかわると思ってください👍

    • @user-tm8yq2lm3j
      @user-tm8yq2lm3j Před 2 lety +3

      @@SekaChan 承知しました。本当にありがとうございます!!😭

  • @agusamu1
    @agusamu1 Před rokem +9

    いつもわかりやすい動画をありがとうございます!
    動画でも出てきております「①機能追加」「②共通点まとめ」に関して抽象クラスの利用意図についていまいち腹落ちしていないため、確認させてください。
    Q1:抽象クラスで定義する意図はオーバーライドを前提にするか、しないかという意図と理解しました。
    抽象クラスでなくてもオーバーライドはできるので、抽象メソッド・クラスを作る、使う必要になってくるポイントがわからなくなりました。具体的にはどういう目的で抽象メソッド・クラスを使うべきなのでしょうか。(オーバーライド前提となることで処理をサブクラス側で分けさせたい場合のオーバーライド漏れ(作りこみ漏れ)を防ぐという目的でしょうか。)
    Q2:共通点まとめが発生する場合のユースケースと開発の流れを知りたいのですが、動画のクラス例でいうとTandFクラス、footballクラスを最初につくっていた状態でその後要件追加が発生し、同じ機能を持つ複数のクラスを作る必要性が出てきたら、サブクラスの機能を共通化したClubクラス(抽象クラス)を作り、抽象クラスを継承するようTandFクラス、footballクラスを直すというように工程を踏むのでしょうか。

    • @SekaChan
      @SekaChan  Před rokem +6

      agusamu1さん、コメントありがとうございました。
      まずQ1については、オーバーライド漏れを防ぐ目的という認識で正しいです。
      通常のクラスを継承してオーバーライドすることもできますが、この場合はオーバーライドをしなくてもコンパイラは何も伝えてくれません。
      それに対して、抽象クラスを継承した場合は抽象メソッドの中身を実装しないとコンパイルが通らないため、オーバーライド漏れを必ず防ぐことができます。
      Q2はそのような工程を踏む“ことも”ある、という感じですね。
      最初から要件追加の可能性を踏まえてClubクラスを作っておけたら理想です。
      ただ、システムが稼働した後で要件追加が発生したら、書いてくれたような工程を踏むこともあります。
      追加クラスが1つしかない場合なら、わざわざClubクラスを作らないケースもあるでしょう。
      機能追加の規模や開発現場(人や時間、資金など)の余裕度にもよって、どのような対応をとるかは変わりますね😄

    • @agusamu1
      @agusamu1 Před rokem +3

      @@SekaChan
      丁寧に回答頂き誠にありがとうございます!理解出来ました!
      これからも本チャンネル応援してます!

  • @user-qv9jc7ey6q
    @user-qv9jc7ey6q Před rokem +5

    Student6(String name, Club club)の部分でClub clubにtafオブジェクトが引数として渡されていますが、サブクラスだから引数で渡されるという認識で良いですか?また、tafオブジェクトが渡されたということは変数名clubが指すアドレス先がtafオブジェクトになったということでしょうか?

    • @SekaChan
      @SekaChan  Před rokem +2

      たけるさん、コメントありがとうございました!
      サブクラスだから引数として渡せる、変数clubが指すアドレスの先にはtafオブジェクトがある、という認識は両方とも正しいですよ👍

    • @user-qv9jc7ey6q
      @user-qv9jc7ey6q Před rokem +3

      @@SekaChan ありがとうございます!めちゃくちゃ分かりやすいです!

  • @user-uc6fs2qb1d
    @user-uc6fs2qb1d Před rokem +7

    いつも分かりやすい動画ありがとうこざいます。他の方も質問されているように、「Club club」の部分がイマイチ分かりません。
    Club club はオブジェクトの位置情報が空欄の変数ということなのでしょうか?
    (Club club = new Club();の左側だけだから)

    • @SekaChan
      @SekaChan  Před rokem +7

      ヤーコンさん、コメントありがとうございました。
      その通りですね👍
      Club club; は String name; のように、中身がからっぽの変数を定義している記述です。
      Studentクラスのコンストラクタが呼び出されたときに、(this.club = club; で)オブジェクトが代入されることになります。

    • @user-uc6fs2qb1d
      @user-uc6fs2qb1d Před rokem +3

      ご返信ありがとうございます!
      実行クラスにて生成されたオブジェクトを入れる箱がClub club(Student6クラスの3行目や5行目)ということが分かりました😊
      Club clubだとClubクラスのオブジェクトを入れる箱だと思うのですが、その中にtafが入ってもいいのでしょうか?
      (Club club = new TandF(陸上部);)

  • @user-ws5qh3ok9k
    @user-ws5qh3ok9k Před rokem +12

    いつも動画ありがとうございます。
    他の方の質問にもあったんですが、 
    Club club;  の記述の部分がわかりません・・
    (変数のデータ型をクラス名にも替えることができる) →ここの部分はどの動画で説明があったか
    教えてもらえないでしょうか。また、
    (Club clubの場合、変数clubの中にはClubクラスを継承したサブクラスのオブジェクトを入れられます。)
    → ここの部分がどうしても理解できずとまってしまっています。
    club.display( );
    の club はどのような働きをするのかがわかりません。 インスタンス化ができないということは、Club club = new Club( );  は
    不可ですしコードにも無いですよね・・?
    stu1.display( );
    の stu1 とは違う意味をもったモノであるとは思うのですが、、すみませんが教えていただけると助かります。

    • @SekaChan
      @SekaChan  Před rokem +11

      シュウヤさん、コメントありがとうございました。
      初めてデータ型のところにクラス名を記述したのは、こちらの動画です!
      → czcams.com/video/HalozHg1LMM/video.html
      たしかに、ここはものすごくややこしいですよね💦
      Club club の club は、【Clubクラスの設計図に基づいて利用できる(=Clubクラスが持つメンバ変数やメソッドを呼び出せる)オブジェクト】という意味合いを持ちます。
      コンパイラはコード内の各変数が適切にメンバ変数やメソッドを利用しているかをチェックしていますが、clubに対してはClubクラスに定義されている情報のみを使っているかを調べているわけです。
      「Clubクラスを継承したサブクラスのオブジェクト」は、必ずClubクラスのメンバ変数とメソッドを保持します。
      よって、サブクラスのオブジェクトをclubに代入しても、clubからClubクラスのメンバ変数やメソッドを呼び出すことができます。
      (ただし、サブクラス独自のメソッドを呼び出すと、Clubクラスには定義されていないためコンパイルエラーになります)

    • @user-ws5qh3ok9k
      @user-ws5qh3ok9k Před rokem +5

      @@SekaChan
      ご返信ありがとうございます!
      Club club; と宣言だけしておくのはOK ということですね
      考え方は、
      Student6 クラスに、型がClus のフィールド変数club を持たせる
      public Student6(String name, Club club){
      this.name = name;
      this.club = club;
      とあって、
      stu1  の場合、 name には菅原  club には taf が入り
      club.display( ); は taf.display( ); と同じ。
      TandFクラス は Clubクラス がextend されて(Club をextendして?) いるので
      taf.display( ); 
      はClubクラスにある
      System.out.println("部活動 :" + name);
      が実行される
      という感じでよろしいでしょうか?
      おいそがしいところすみません

    • @SekaChan
      @SekaChan  Před rokem +9

      そうですね👍
      Club club; と宣言だけするのはOKです。
      taf.display() はTandFクラスのdiplay()メソッドを呼び出しますが、実際には継承(extends)しているClubクラスのdiplay()メソッドを実行することになります。
      (TandFクラスでdiplay()メソッドがオーバーライドされている場合は、オーバーライド後のメソッドを実行します)

    • @user-ws5qh3ok9k
      @user-ws5qh3ok9k Před rokem +3

      ありがとうございます!
      使いこなせるようがんばります!

    • @user-dj5bw4rz8v
      @user-dj5bw4rz8v Před 4 měsíci

      @@SekaChanpractice();はサブクラスでオーバーライドしているという認識であっていますか?

  • @user-yq2cj2sx9r
    @user-yq2cj2sx9r Před rokem +10

    きちんと概念を教えて下さる解説が他にないので、初学者の自分としては非常に助かっております。本当にありがとうございます。急がば回れと思いながら、動画を何度も見直しながら自分の中に落とし込む作業をしています。
    ただ、どうしてもわからないのでご教授下さい。( ゚Д゚)
    Student6クラスでクラブオブジェクトが出てくるのですが、これが何で、どこから出てくるのかがわかりません。Clubオブジェクトのclub変数???こんなのやったっけ?って感じです。さかのぼって参照型の型変換も何度も視聴していますが、何か見落としていると思うので、どの動画を見たらよいのか、ヒントを頂けないでしょうか???

    • @masarich12
      @masarich12 Před rokem +5

      すみません。先生ではありませんが、ちょうど私も同じ質問をしようと思ったら、他のコメントでもたくさん先生が回答されてるようなので、それを読まれてみてはいかがでしょうか。←自分も今読んでます。

    • @user-yq2cj2sx9r
      @user-yq2cj2sx9r Před rokem +3

      @@masarich12
      ありがとうございます!!
      すぐに確認してみます。
      ご親切に教えて頂き感謝でございます。🙇‍♂️

    • @masarich12
      @masarich12 Před rokem +4

      @@user-yq2cj2sx9r 自分のコメント編集しちゃいましたが、下にも同じ質問&回答がいくつかあるので、先生のコメント見てみてください。私も今読んで勉強中です。

    • @user-yq2cj2sx9r
      @user-yq2cj2sx9r Před rokem +3

      @@masarich12 そうですね。まずは、コメント読んでから質問するようにいたします!!

    • @user-yq2cj2sx9r
      @user-yq2cj2sx9r Před rokem +3

      追記 コメント読みました。
      他の皆さんも同じような事で疑問をもっていたのですね。パニクって質問をしてしまいました。
      諸々スッキリしつつあります!!

  • @su-xo8io
    @su-xo8io Před rokem +5

    Club club; の書き方についてですが、変数のデータ型をクラス名にも替えることができるという認識で大丈夫でしょうか。

    • @SekaChan
      @SekaChan  Před rokem +3

      s uさん、コメントありがとうございました。
      その認識で大丈夫ですよ👍
      Club clubの場合、変数clubの中にはClubクラスを継承したサブクラスのオブジェクトを入れられます。

  • @nisemonar12
    @nisemonar12 Před 2 měsíci

    Clubクラスにおいて抽象メソッドのpracticeメソッドを書くメリットが分かりません。これを書かずにTandFクラスやFootballクラスにpracticeメソッドを書くとエラーが起こるのでしょうか?
    お忙しい中申し訳ないですが、教えて貰えると助かります🙏

    • @SekaChan
      @SekaChan  Před 2 měsíci +1

      Clubクラスで抽象メソッドを定義せずにTandFクラスやFootballクラスにpracticeメソッドを書いてもエラーにはならないですね😄
      抽象メソッドを書くメリットについては、17:54以降を見てみてください。

    • @nisemonar12
      @nisemonar12 Před 2 měsíci +1

      @@SekaChan お忙しい中返信ありがとうございます🙏
      とりあえずメリットはコードの書き方を統一できるということですね!
      今の簡単なコードではあまりメリットは感じられないけど、開発などをしていく上でもっと大規模になると大きなメリットになるのかなと考えました🤔

  • @minghuhe199
    @minghuhe199 Před 11 měsíci +1

    ソースファイルはどこでしょうか。

    • @SekaChan
      @SekaChan  Před 11 měsíci

      概要欄のリンクからダウンロードしてもらうことができます。
      念のため、こちらにも掲載しておきますね。
      bit.ly/3GMTkxX

  • @sanrushieru
    @sanrushieru Před rokem +6

    Club clubの書き方が理解できません。Club club = new Club( )とかになるようにかんじてしまいます。難しいです

    • @SekaChan
      @SekaChan  Před rokem +3

      Yoshida Sanさん、コメントありがとうございました。
      たしかに、4-6~4-8は基礎講座の中で一番難しい内容ですね💦
      「Club clubの書き方」がどんなことを指しているのかが分からないのですが、オブジェクト生成時のメモリ上の動き(newで何が起こって、変数clubの中に何が入るのか)が分かれば、もしかしたら解決につながるかもしれません。
      よければこちらの動画も参考にしてみてください→czcams.com/video/HalozHg1LMM/video.html

  • @masuyou6587
    @masuyou6587 Před 2 lety +4

    知らない単語がでたとき、その本来の意味を知ると、その意味がわかります。
    ポリモーフィズムpolymorphism
    1 〘生物〙 多形性.
    2 〘結晶〙 同質異像.
    JAVAコンパイラを設計した人がこの名称にした。
    語源の意味の説明も合わせてしてください。

  • @user-xg5lx7kf8k
    @user-xg5lx7kf8k Před rokem

    クラブクラブって何??

    • @user-ky9gu5xx8e
      @user-ky9gu5xx8e Před 2 měsíci

      Club型の変数club。
      アドレス値が入る空の箱を用意してます。

  • @JJ-gk9cv
    @JJ-gk9cv Před rokem +4

    素晴らしい解説動画をご提供いただき、大変ありがとうございます。
    お陰様で、今度こそJavaに慣れることができそうな手ごたえを感じています。
    ひとつだけ質問させていただけますでしょうか。
    Lesson10の3(最後の例題)のコンパイルを行う際に、設計クラスおよびインターフェイスのjavaファイルをパッケージのフォルダに
    移動させて再コンパイルを行うことでエラーを回避する以外に方法はございますでしょうか。
    当方で調べてみたところ、javacには-classpathオプションがあるようですが、以下のように記述しても同様のエラーになります。
    javac -d . -classpath . *.java
    ご都合が良い時にアドバイスを頂けますと幸いです。

    • @SekaChan
      @SekaChan  Před rokem +1

      JJさん、コメントありがとうございました。
      僕の動画がJavaの勉強に役立っているようで良かったです😄
      4-10の問題3について、-classpathオプションを使うと下記の記述でコンパイルできますね。
      javac -d . -classpath mypack *.java
      (-classpath mypackとすると、UseVehicle.javaのコンパイル時にmypackフォルダ内の情報も見にいきます)
      ※コメント欄での質問回答は、視聴者さん全員に参考にしてもらいたいと考えています。
       お手数ですが、次回は該当動画のコメント欄で質問してもらえると嬉しいです🙏

    • @JJ-gk9cv
      @JJ-gk9cv Před rokem +2

      お返事をいただき、ありがとうございます!コメントさせていただく動画を間違えてしまい、大変申し訳ございません。総集編のビデオを拝聴させていただいてますが、コメントを記入するときに対象の動画を間違えたようです。
      周りの知人や友人、職場の同僚などに「せかチャン」を薦めていて、これからみんなで勉強してゆきたいと思います。どうぞよろしくお願いいたします。🙂

    • @SekaChan
      @SekaChan  Před rokem +1

      @@JJ-gk9cv さん、返信ありがとうございました!
      総集編の動画を見てくれてたんですね。どのコメント欄で質問すれば良いかが分かりにくいこともあると思うので、可能な範囲で意識してもらえたら大丈夫です👍
      周りの方たちに薦めてくれてありがとうございます!!このチャンネルで勉強しようっていう仲間が集まってくれるおかげで、僕も動画づくりにすごくやりがいを感じてます。これからもよろしくお願いします✨

  • @marikoko3919
    @marikoko3919 Před 5 měsíci +1

    あけましておめでとうございます。先月知り合いに教えてもらって、動画拝見させていただいています。還暦の手習いです(苦笑)。とても分かりやすくて助かります。ずいぶん日が経っているのですが、質問させていただいてよいでしょうか。やはりClub clubで引っかかっていて、皆さんのコメントと先生の返答を読ませていただいて、何となく理解できたと思うのですが、もしかしたら 『private Club bukatsu;』 でも良いのでしょうか。で、『public Student6(String name, Club bukatsu){』、『this.bukatsu=bukatsu; 』 クラス名Clubと変数名 clubは同じclubである必要はありますか?ご返答いただけると嬉しいです。よろしくお願いします。

    • @SekaChan
      @SekaChan  Před 5 měsíci

      mariko koさん、明けましておめでとうございます!
      > private Club club;
      のところは、
      > private Club bukatsu;
      でも大丈夫ですよ😄
      (コンストラクタの記述も書いてもらった通りでOKです)
      実際の開発現場ではクラス名とオブジェクト変数名を合わせることも多いため、今回のサンプルでも「Club club」としました。
      ただ、分かりにくくなっちゃったかなと反省しています‥

    • @marikoko3919
      @marikoko3919 Před 5 měsíci +1

      早速のご返信感激です
      これでスッキリしました
      ありがとうございます
      先に進んでみたら、まだまだ難しい事が盛り沢山ですが、何とかしがみついて理解をして、アプリを作ってみたいと思ってます
      章の終了時に掲載される応援メッセージにも励まされてます
      これから、過去の講座も拝見しに行きます
      心より応援してます
      ありがとうございました