インタフェースの実装方法やメリット、抽象クラスとの違い【Java入門講座】4-8 インターフェース

แชร์
ฝัง
  • เผยแพร่เมื่อ 19 ธ.ค. 2024

ความคิดเห็น • 55

  • @dhyttya03
    @dhyttya03 2 วันที่ผ่านมา +1

    本当に素晴らしい講座をありがとうございます!とても分かりやすく、取り組みやすいのでとても助かってます!

  • @Ks-zv6iu
    @Ks-zv6iu 7 หลายเดือนก่อน +8

    分かりやすすぎて鼻血出そう
    Java研修で困ってた内容なので大変助かりました🙇🙇

    • @SekaChan
      @SekaChan  7 หลายเดือนก่อน +2

      ここは難しいですよねー
      この先Webアプリ講座やDB講座なども公開してるので、また分からなくなったら鼻に詰めるティッシュを用意して戻ってきてください😂

  • @にくまん2
    @にくまん2 2 ปีที่แล้ว +9

    Java初心者です。
    とってもわかりやすいですが、難しく感じるところなので何回も動画見返したいと思います!

    • @SekaChan
      @SekaChan  2 ปีที่แล้ว +1

      にくまんさん、こんにちは!
      コメントありがとうございます😀
      たしかに、インタフェースは難しいですよね💦
      Java入門講座6章までのうち、一番ややこしいのが4-6~4-8かなと思います。
      動画を見返してもらって、もし分からないことがあれば聞いてください✨

  • @朝ごはん-p1q
    @朝ごはん-p1q 7 หลายเดือนก่อน +3

    半日調べてもわからなかった抽象クラスとインターフェースの使い分け方が3分で理解できて感動しました✨
    ありがとうございます。

    • @SekaChan
      @SekaChan  7 หลายเดือนก่อน

      抽象クラスとインタフェースの使い分けはなかなか難しいですよね。
      この動画が役に立ったみたいで良かったです😄

  • @dusc_asdf
    @dusc_asdf ปีที่แล้ว +3

    ホワイトボードの字綺麗すぎます!
    見やすい😮

    • @dusc_asdf
      @dusc_asdf ปีที่แล้ว +2

      枝を張る、色を塗るとか専門的な単語では分かりにくい概念をうまく表現されていて、とも分かりやすかったです。

    • @SekaChan
      @SekaChan  ปีที่แล้ว

      ロレムさん、コメントありがとうございました!
      ホワイトボードは少しでも分かりやすさにつながればと思って、超ゆっくり丁寧に書いてます😄
      インタフェースは難しく感じる人が多いので、概念がうまく伝わって良かったです!

  • @ねもてぃー-u1k
    @ねもてぃー-u1k 2 ปีที่แล้ว +3

    現在SESプログラマーですが、教えるのが好きでプログラミング講師業考えてます。いつも勉強になります。

    • @SekaChan
      @SekaChan  2 ปีที่แล้ว +4

      ねもてぃーさん、こんにちは。
      コメントありがとうございます!
      講師業は楽しいですよ😄教えるのが好きな人は向いてると思います。
      準備にはものすごーく時間がかかりますが、僕はその時間が結構好きなんですよね✨
      講師業の面でも何か気になることがあれば、遠慮なく聞いてください!

    • @ねもてぃー-u1k
      @ねもてぃー-u1k 2 ปีที่แล้ว

      @@SekaChan さん
      ありがとうございます!
      何かありましたら相談させていただきます🙇‍♂️

  • @TmMttm_
    @TmMttm_ 2 ปีที่แล้ว +3

    他言語で業務アプリの開発を行っております。
    Javaは今回初めてです。
    とてもわかりやすく、ここまで継続できています。ありがとうございます。
    インタフェースについて教えてください。
    「Person」から継承された「Student」に「Englishable」を実装する場合、
    どのように記載するのでしょうか、教えてください。
    白板でのご説明のイメージです。

    • @SekaChan
      @SekaChan  2 ปีที่แล้ว +5

      Tm Mtさん、コメントありがとうございました!
      多言語で開発してるのにJavaも勉強してるってスゴイですね✨
      インターフェースについて、疑問が解決したみたいで良かったです!
      他の人がこの質問を見たときのために書いておくと‥
      > class Student extends Person implements Englishable
      となりますね。

  • @Web-dd2he
    @Web-dd2he ปีที่แล้ว +4

    いつもわかりやすい動画をありがとうございます^^
    初歩的な質問失礼します😅
    インターフェースはよく現場で使うと思うのですが、どのような現場で使われるか知りたいです!
    少しイメージがわきづらくて…
    具体例などがあるとより理解が深まるなと思い…
    お忙しいとは思いますがよろしくお願いします❗

    • @SekaChan
      @SekaChan  ปีที่แล้ว +3

      やきちーず@エンジニアになる人さん、コメントありがとうございました!
      本当は現場で使われるレベルの具体例を話せたら良かったのですが、ここまでの講座内容だけで理解してもらえる例を考えたところ動画内で話した例えが精いっぱいでした‥
      (現場レベルではありませんが)4章最後の演習でインタフェースを使う問題を用意してあるので、そちらのプログラムも見てもらうと参考になるかなと思います。
      なお、6章のクラスライブラリやデザインパターンまで進めると、インタフェースの本質や具体例に触れられますよ😄

  • @DGT-yl1mm
    @DGT-yl1mm ปีที่แล้ว +4

    動画内でお話しされたインターフェースの使い方って、抽象クラスを使っても出来るんではないですか?イマイチ違いがわからなかった、、

  • @probapri5708
    @probapri5708 ปีที่แล้ว +2

    いつもお世話になっております。質問させてください。4:49あたりで、抽象クラスは、ひとつしか継承できないんでしょうか?複数のサブクラスを持つことができませんか?

    • @SekaChan
      @SekaChan  ปีที่แล้ว +2

      prob apriさん、コメントありがとうございました。
      (抽象クラスかどうかにかかわらず)継承できるクラスは1つだけですね。また、複数のサブクラスを持つことはできます。
      例えば、クラス定義で
      > class Baseball extends Club
      > class Football extends Club
      のように、「extends ~」の「~」に指定できるクラスは1つだけです。
      またこの場合、Clubクラスは複数のサブクラス(BaseballとFootball)を持っています。

    • @probapri5708
      @probapri5708 ปีที่แล้ว +3

      サブクラスの方から見て、継承できる(している)クラスは1つだけというのですね。😀@@SekaChan

  • @TmMttm_
    @TmMttm_ 2 ปีที่แล้ว +3

    インタフェースの質問の件、課題にありました。解決しました、すみません。

  • @らら-d4p
    @らら-d4p 2 ปีที่แล้ว +3

    インターフェイスと抽象クラスの違いはわかるのですが、使い分けがわかりづらくて、、
    こう言う場合はインターフェイス。
    こう言う場合は抽象クラスを使う。みたいな使い所の違いって何ですか?

    • @SekaChan
      @SekaChan  2 ปีที่แล้ว +1

      ららさん、コメントありがとうございました。
      インタフェースと抽象クラスの使い分けは、(5:08以降の説明と被ってしまいますが)クラスやインタフェースをどのように組み合わせてシステム全体を作っていきたいかによりますね😄
      そのインタフェース・抽象クラスだけを見たらどちらでも同じような機能を作れるんですが、他のクラスとの関連性を考えるとどちらがより適しているかが分かりやすいかなと思います。

  • @kseino1493
    @kseino1493 2 ปีที่แล้ว +3

    質問失礼いたします。
    System.out.println(English.LANGUAGE);のところで、LANGUAGEの場所に定数にした[英語]が入るのは分かったのですが、実行した際にEnglishable.英語と表示されないことに疑問を持ちました。
    勉強し始めてまだ日が浅いため初歩的な質問で大変恐縮なのですが、お答えをいただけたら幸いです。
    よろしくお願いしたします。

    • @SekaChan
      @SekaChan  2 ปีที่แล้ว +6

      K Seinoさん、質問コメントありがとうございました!
      初歩的な質問でも全然OKですよ😄
      むしろ、勉強し始めて日が浅いのにインタフェースを学んでるのはスゴイなぁと感じました!
      変数(定数)を参照するとき、自クラスにある場合は「変数(定数)名」だけで使えます。
      他クラスの変数(定数)を参照する場合は、どのクラスの?を知らせるために「クラス名.変数(定数)名」と書く必要があるんですね。
      Student7.javaのdisplayEng()において、「name」は自クラスにあるので【name→Mike】と置き換わります。
      「LANGUAGE」はEnglishableにあるので【Englishable.LANGUAGE→[英語]】と置き換わります。
      「Englishable.LANGUAGE」全体で「EnglishableのLANGUAGE」という意味の1つの定数だと考えてください✨

    • @kseino1493
      @kseino1493 2 ปีที่แล้ว +3

      @@SekaChanなるほど、なんとなくですが理解できました!ありがとうございます!

  • @かとうともき-w4c
    @かとうともき-w4c ปีที่แล้ว +8

    継承の 「extends 〇〇」と、実装の「implements ◇◇」の併用は可能ですか?また、二つのインターフェースを一つのクラスに同時に実装できるか、教えていただきたいです

    • @SekaChan
      @SekaChan  ปีที่แล้ว +16

      かとうともきさん、コメントありがとうございました!
      継承と実装の併用・複数のインタフェースの実装は、両方とも可能ですよ👍
      もしクラスAを継承して、インタフェースBとインタフェースCを実装したい場合は
      「class クラス名 extends A implements B, C」
      と書きますね(extends→implementsの順番です)

  • @暇潰しの動画日記
    @暇潰しの動画日記 2 ปีที่แล้ว +3

    Englishableインターフェースの3行目のvoid display();はなくても実行できるのですが、これを入れる意味はなんでしょうか?教えていただけると幸いです。

    • @SekaChan
      @SekaChan  2 ปีที่แล้ว +3

      暇潰しの動画日記さん、コメントありがとうございました。
      Englishableインタフェースの3行目に void displayEng(); を入れることで、(Englishableインタフェースを実装している)StudentクラスとBaseballクラスに displayEng()メソッドの定義を強制させることができます。
      実際の開発現場では作るクラスがたくさんあり、エンジニアごとに分担することがほとんどなんですね。
      そのとき、StudentクラスとBaseballクラスの作成者に「displayEng()メソッドを作ってね」と伝えた(仕様書に書いた)だけでは、実際に作ってくれる保証はありません。
      そこで、Englishableインタフェースを実装する形にしておけばdisplayEng()メソッドがないとコンパイル時点でエラーになるため、メソッド定義を強制させることができます😄

    • @暇潰しの動画日記
      @暇潰しの動画日記 2 ปีที่แล้ว +3

      @@SekaChan なるほど、、
      抽象クラスを継承した時と同じということですね!
      コメント一つにここまで丁寧に返してくれて本当に嬉しく思います。現在、Javaの職業訓練校に通っており、復習がてらせかチャン見てます!学校の先生よりわかりやすくて最高です!今後もよろしくお願いします。

  • @BUMP_OF_CHICKEN_TV
    @BUMP_OF_CHICKEN_TV 2 ปีที่แล้ว +6

    Englishableのインターフェースは、実装したクラスにdisplayEng()の定義を強制させるという意味があるのが理解できました。実際に、BaseballクラスでdisplayEng()を定義しなかったらエラーになりました。
    EnglishableのインターフェースのLANGUAGEがよくわからなかったです。
    BaseballクラスでLANGUAGEを使用しなくても、エラーにはならなかったです。

    • @SekaChan
      @SekaChan  2 ปีที่แล้ว +7

      ニコルさん、コメントありがとうございました。
      インターフェースは実装したクラスにメソッドの定義を強制させるものですね。
      一方、インターフェース内に定数を定義しても、そのインターフェースを実装したクラスに影響を与えることはありません。
      クラスからその定数を利用しても良い(しなくても良い)、というイメージですね🍀

  • @アフィン鍵
    @アフィン鍵 11 หลายเดือนก่อน +1

    初コメントで質問失礼いたします。
    StuSample7クラスとStudent7クラスについてなのですが、StuSample7内でStudent7型のクラスを生成していると思うのですが、StuSample7とStudent7には直接的なつながりがないのにStuSample7クラスはStudent7型がどのような方をしているのかわかっている振る舞いをしている気がします。StuSample7はStudent7を継承も実装もしていないのに何故Student7がどんな型をしているのか分かるのでしょうか?
    eclipseでコードを書く場合、同じsrcファイル?同じパッケージ?に入っているならば別のjavaファイルでクラスを定義しても中身は共有されているということなのでしょうか?

    • @SekaChan
      @SekaChan  11 หลายเดือนก่อน +1

      StuSample7クラスからStudent7クラスの情報が分かるのは、2つのクラスファイルが同じフォルダ(パッケージ)の中に入っているためですね。
      Student7クラスを利用するときはStudent7.classを参照するのですが、このとき、StuSample7.classと同じフォルダ内を探しにいく仕組みになっています。
      仮にStudent7.classを別のところに移動すると、StuSample7はコンパイルも通らなくなりますね。

  • @icantspeakenglish10
    @icantspeakenglish10 ปีที่แล้ว +2

    クラス二つ以上出ると大変だがなんとかする

  • @blackbird02169
    @blackbird02169 ปีที่แล้ว

    Javaを使ったポートフォリオを作りたいので、一通り復習しているのですが
    イマイチ現場での使われ方?が想像できない。。経験者からみた未経験のポートフォリオの企画ってどんなところを見ているのでしょうか。

    • @SekaChan
      @SekaChan  ปีที่แล้ว

      コメントありがとうございました。
      それぞれの会社や人事担当者によって、人材の評価基準(何を重要視するか)は変わりますからね。
      ポートフォリオをどう使うかも、見る人によって変わる気がします。

  • @kiyotakanakajima4857
    @kiyotakanakajima4857 ปีที่แล้ว

    インタフェースは4行目があった場合も抽象メソッドですかね。

  • @僕を忘れた頃に君を忘れられない
    @僕を忘れた頃に君を忘れられない 7 หลายเดือนก่อน

    フィールドって引数のことですか??

  • @だぁさん-b2g
    @だぁさん-b2g 5 หลายเดือนก่อน +1

    明日javasilverの試験んだああ

    • @SekaChan
      @SekaChan  5 หลายเดือนก่อน +1

      勉強してきた成果を100%出し切ってきてくださいいい✊

    • @だぁさん-b2g
      @だぁさん-b2g 5 หลายเดือนก่อน

      @@SekaChan 62パーでしたw

    • @SekaChan
      @SekaChan  5 หลายเดือนก่อน +1

      @@だぁさん-b2g そんなああ‥

  • @d-d-73
    @d-d-73 ปีที่แล้ว +1

    動画とても分かりやすかったです。自分で他に勉強している時の質問です。インターフェイスを別のクラスで扱う時に、インプリメンツがなく、インターフェイス型?のメンバ変数とインターフェイスのメソッドをオーバーライドしたものが記載されたプログラムではどうなっているのでしょうか?インターフェイスはリポジトリーでクラスはサービスでした。
    質問がふわっとしていて申し訳ありませんが、よろしくお願いします。

    • @SekaChan
      @SekaChan  ปีที่แล้ว +1

      D-アラニルD-アラニンさん、コメントありがとうございました!
      せっかく質問をくれたので回答したい気持ちはあるんですが‥すみません。何を聞かれているのかが分からないです🙏
      「インターフェイス型のメンバ変数」とあるので、おそらく何かのインターフェイスを実装したクラスのオブジェクトをメンバ変数として持っているようですね。
      また「他に勉強しているときの質問」ということで、もしできるようなら、その教材?を扱っている方に直接質問してもらう方がより明確な回答をもらえる可能性が高いかなと感じました。

  • @ああ-n3o7y
    @ああ-n3o7y 8 หลายเดือนก่อน

    PHP、SQLにも興味があるんですが流石に扱わないですよね?

    • @SekaChan
      @SekaChan  8 หลายเดือนก่อน +1

      PHPはリクエストが少ないのでまだ手付かずですが、SQLはこちらの動画で解説してますよ😄
      ●【有料級】JavaでDB接続するJDBCプログラミングを完全解説
      th-cam.com/video/wu4YCDyJFPg/w-d-xo.html

    • @ああ-n3o7y
      @ああ-n3o7y 8 หลายเดือนก่อน +1

      @@SekaChan
      ありがとうございます。
      神すぎる!
      無料でこの授業はエグすぎますよ~。
      本当に有料レベル

  • @kensjazzpiano9214
    @kensjazzpiano9214 11 หลายเดือนก่อน

    インターフェイスはすべてメソッドが抽象化されている場合で、抽象クラスを継承する場面での抽象化クラスって、一部のメソッドは抽象化メソッドなく具象メソッドで、派生クラスではそれらのメソッドを使用できるという私の認識なのですが、この動画の説明は「枝を張る」とかの例えを早口で言っていて違いがわからなかったです。

    • @nakohama1705
      @nakohama1705 10 หลายเดือนก่อน

      Java8から言語拡張されインタフェースでdefaultメソッドを使えるようになってます。ですので、インターフェイスでもdefaultキーワードを使用することで具象メソッドが記述できるかと.