【完全マスター】継承やポリモーフィズムの考え方やプログラムが丸分かり【Javaプログラミング入門講座 総集編】
Вставка
- Опубліковано 8 лип 2024
- 【Java入門講座】4章 オブジェクト指向を使いこなそう! の動画を1本にまとめました。
オブジェクト指向の継承からオーバーライド、抽象クラスやポリモーフィズム、インターフェースまで、この1本ですべて丸分かり!
⭐無料&楽しく勉強できる場所を作りたい!そんな想いで授業動画を作ってます😁
→チャンネル登録/高評価/周りにオススメ で応援してもらえると嬉しいです✨✨
🌸チャンネル登録はこちら!
ua-cam.com/users/SekaChan?su...
📙授業ノートはこちら!
bit.ly/3evwajv
📄プログラムはこちら!
bit.ly/32HnOmb
👀関連動画はこちら!
▼Javaの始め方(1章 総集編)
• 【Java入門講座 総集編】40分でJava...
▼Javaの基本文法(2章 総集編)
• 【Java入門講座 総集編】超初心者歓迎!J...
▼オブジェクト指向ー入門編ー(3章 総集編)
• 【2時間で完全マスター】オブジェクト指向の考...
▼次の動画
• 【この1本でOK】例外の種類から例外処理のプ...
▼授業動画の一覧
• 独学でJavaプログラミングをマスター!初心...
💡チャプター
0:00:00 オープニング
0:00:44 継承( • 継承のメリットやextendsの使い方を理解... )
0:09:13 オーバーライド( • オーバーライドのメリットと3つの条件【Jav... )
0:17:21 this・super( • thisとsuperの使い方を初心者向けに解... )
0:31:54 final( • finalの意味と使い分けをシンプルに解説【... )
0:40:07 プログラミング演習( • 継承、オーバーライド、this・superの... )
0:56:54 参照型の型変換( • 型変換できる条件、自動とキャストの違いとその... )
1:12:56 抽象クラスとポリモフィズム( • ポリモフィズムとは何か、使い方やメリットをコ... )
1:33:02 インタフェース( • インタフェースの実装方法やメリット、抽象クラ... )
1:44:05 パッケージ( • パッケージの使い方、超便利なコンパイル・実行... )
1:59:06 プログラミング演習( • 抽象クラス、インタフェース、パッケージを総復... )
Correction:
34:11 finalはメソッド内で宣言する変数にもつけることが可能です
🙋♂️プロフィール
【せかチャン 菅原】
・東京工業大学大学院 情報理工学研究科 卒業
・大学生、大学院生のときに5年半塾講師
・IT研修講師として情報技術、プログラミングのセミナーを企画・実施
・Oracle社より「Instructor of the Year(満足度日本一)」「Java講師賞」を4年連続受賞
「分かった!」と言ってもらえる瞬間、勉強を楽しいと感じてもらえる瞬間が好きです。
フリーラーニング(無料で学べる場)を広げたいと思ってUA-camをはじめました。
一緒に楽しく勉強&成長していきましょう!
📳Twitter
/ sekachanit
🎵音源提供
DOVA-SYNDROME
dova-s.jp/
※動画によっては使用していない場合があります
#Java #プログラミング #せかチャンのJava入門講座 #プログラマー #せかチャン
総集編ありがとうございます!4月から初めてjavaの現場なので動画見ながら思い出しています!
Saki Haruさん、コメントありがとうございます!
総集編が役立っているようで嬉しいです。Javaの開発デビュー、応援してますよ✊
(他にも春からJava開発が始まる人や新人SEさんが多そうなので、今夜メッセージ動画を公開予定です)
本当に分かりやすいですし、聞いていて楽しい講習です。本当にありがとうございます。何回も聞いて、理解を深めていきたいと思います。
柏木さん、コメントありがとうございました!
「楽しい」って感じてもらえてとても嬉しいですね😄
Java基礎講座は6章までありますが、この4章が一番難しいと思います。
何回か見返してもらいながら、ぜひ理解を深めていってください!
ただひたすらありがとうございます。感謝感謝です。
9 igonさん、コメントありがとうございました!
こちらこそ、いつも動画を見てもらえて感謝です😄その調子で頑張っていきましょう!!
わかりやすい説明ありがとうございます。また、プログラムコードの掲出ありがとうございます。感謝します。
9 igonさん、コメントありがとうございました!
この動画はJava基礎講座で一番難しい内容なので、分かりやすいと感じてもらえて良かったです。
ソースコードもガンガン活用してもらえると嬉しいです✨
かなり理解しやすかった。
学生の頃にプログラミング言語の勉強をしていたが、オブジェクト指向の殆どを理解できないまま
途中で挫折したので、この動画をもっと早く見ていればよかったと感じた。
椎名明さん、コメントありがとうございました!
オブジェクト指向って最初は理解するのが難しいですよね(僕も学生の頃はあまり分かりませんでした‥💦)
「もっと早く見ていればよかった」と感じてもらえる動画を増やせるように、これからも頑張ります!
ほんとにわかってもらうように、という工夫に溢れてて1000回くらいいいね押したい。聞いてるだけで楽しいです。ありがとうございます。
玉田Gさん、コメントありがとうございました!
「わかってもらうように」という工夫が伝わったみたいで、とても嬉しいです。
僕もどう解説しようかなと考えてるだけで楽しいです。こちらこそありがとうございます!
@@SekaChan erdp
いつもモチベ上げてくれる言葉を織り交ぜながら進めてくれるからほんとに勉強捗ってます!感謝です🙇
ここは特に難しいので、モチベーション上げていくのが大事ですよね!
4章は基本講座一番の難所なので、ここが理解できたら自信もってください😄
わかりやすい説明で理解がすすみます。 楽しいです。 ありがとうございます。
影山隆さん、こんにちは。
分かると楽しいし、楽しいと頭に入りやすいですよね。
こちらこそ、嬉しいコメントありがとうございました✨
何度か見返しましたが、動画の内容をしっかりと理解することが出来ました!
授業用ノートをプリントして大事だと思った箇所を書き込みながら、同時に自分のローカルでもプログラムを動かしながら勉強しています!
まだまだJavaの学習を始めたばかりですが、先生の動画のおかげで楽しく学習を進めることが出来ています。ありがとうございます。
コメントありがとうございました!
ここはJava入門講座のなかで一番難しい章なので、この動画の内容を理解できたら自信もって良いですよ。
ただ動画を見るだけじゃなくて、自分でポイント箇所を書き込んだり、プログラムを動かしたりしてるのがすごく良いと思います。
この先面白いJava技術をたくさん解説してるので、これからも楽しく勉強していってください!
学生です。
来年の4月よりIT企業に入社のため、現在リモートでJava研修中です。
総集編を1章から拝聴しております。
どれもとても分かりやすくためになる動画で、とてもありがたいです。
これからもお世話になります。
応援しています!
佐藤明さん、コメントありがとうございました!
来年からIT企業に入る予定で、もうJava研修がスタートしてるんですね。
総集編の1章からwebアプリ編までが、新人研修で2~3週間かけて教えている内容です。
ここまでいけたら、かなり余裕をもって社会人デビューできると思いますよ👍
自分のペースで勉強を進めてもらえたらと思いますが、学生として過ごせる時間も貴重です。
目の前の学生生活も思いきり楽しんでくださいね!
ありがとうございます!
THANKSコメントありがとうございました!
この動画が役に立ったみたいで良かったです😄
この御礼は良い動画を作り続けることでお返ししていきます!
ありがとうございました、分かりやすかったです!
第5章に行ってきます。
Premiumツムツムさん、コメントありがとうございました!
ここが入門講座で一番難しい内容なので、分かりやすいと感じてもらえて良かったです。
第5章、行ってらっしゃい🖐
いろんなIT関連動画を見ましたが、ネクストドアの動画が一番わかりやすくで実戦的です。
できれば列挙型とラムダ式について、わかりやすく教えていただければうれしいです。
Julius Petroniusさん、コメントありがとうございました!
分かりやすいと感じてもらえたようで良かったです✨
列挙型とラムダ式ですね。動画化するか検討してみたいと思います。
見終わりましたーfinal。package等知らない範囲もありつつプログラミングの意図を理解できてよかったです!他も見ます
うちゃさん、コメントありがとうございました!
ここまで見終わったら、Java入門講座の大きな山は越えたといえますね。
この調子で続きも頑張ってください!
Javaを独学で勉強しSilver取得を目指しているのでとてもわかりやすくて助かっています。(環境がMacなので、コンパイルの時に少し違いますが汗)
ありがとうございます。
Masatakaさん、コメントありがとうございました!
環境が違うのは大変だとは思いますが、僕の動画を見てもらえていて嬉しいです✨
このJava入門講座を見た人から、Silverに合格できたっていう報告をよく頂いています。
Masatakaさんも、ぜひ合格目指して勉強がんばってください!
自分用
・参照型の型変換
継承・ポリモフィズム
インターフェース?
37:25
実行用クラスで宣言された変数のこともメンバ変数というのですね。
設計図クラスで宣言される変数のことを指す用語だと認識していました。
たしかに実行用クラスでもメンバ変数を宣言することはできますが、僕の動画では宣言した記憶がありません。
もしそのように発言しているところがあったら修正が必要な可能性が高いので、お手数ですが教えてもらえると嬉しいです🙏
(37:25付近を何度か見直しましたが、そのような発言は確認できませんでした)
@@SekaChan
お返事ありがとうございます。自分の理解が曖昧な為もしかしたら解釈が間違っているかもしれませんがご了承ください。
34:16の板書で「メンバ変数にfinalをつけると代入ができなくなり定数になる」と記述されており
37:10で実行用クラス内に「final int BASE_NO=1000;」と定数が宣言されていたので、私は板書と結びつけて
この記述はメンバ変数が定数になったもの、つまり実行用クラスにメンバ変数が定義されていたと認識してしまいました。
@@user-oq4tt7fg9p
返信ありがとうございました。
また、詳細を教えてもらえて本当に感謝しています。
結論からいうと、finalキーワードは変数全般につけることができて、37:10で紹介しているサンプルではローカル変数(メソッド内で宣言した変数)にfinalをつけていました。
ご指摘の通り、34:16の板書だと「finalをつけられるのはメンバ変数だけ」とも読み取れてしまうため、動画内に注釈を加えたいと思います。
誤解につながる情報をお伝えしてしまってすみませんでした。
また、指摘してもらえたことが調べ直すきっかけになりました。改めてありがとうございました!
@@SekaChan
いえいえ、とんでもないです!!
こちらこそお返事のお陰で認識の再確認ができました。ありがとうございます!
これからも菅原さんの動画にお世話になりますのでよろしくお願いします。
本当に分かりやすいです。グットボタン一回じゃ足りない( ; ; )
あいうえお掃除機さん、コメントありがとうございました!
グッドボタン1回でも嬉しいです✨
これからもボタンを連打したくなるくらいの動画をたくさん作っていきます!
演習問題4-10について確認させてください。
Vehicleを継承するコンストラクタ上で、
crewNumへの値の設定を"super.crewNumではなく"this.crewNum"になっているのは、
アクセス修飾子がprotectedのため、自オブジェクトの変数のような扱い方ができるという認識であっておりますでしょうか。
jon kimさん、コメントありがとうございました!
その認識で合ってますよ👍
Vehicleを継承したので自クラスのメンバ変数として扱うことができます!
@@SekaChan
ありがとうございます🤩
わかりやすい説明ありがとうございます。
1つ疑問に思ったのですが、抽象メソッドを持たせずにpublic void proctice(){};としておいたほうが後で使用するときにオーバーライドで処理内容を変更できるし、クラスのインスタンス化も可能になるため便利ではないかと思ったのですが、このような考え方はオブジェクト指向から外れているということになるのでしょうか?
ああさん、良い質問をありがとうございました。
これは【proctice()メソッドの中身を実装しなくてもインスタンス化できて良いのか】によりますね。
もしこれを許してサブクラス側の自由度を上げたい場合は、そのようなメソッド定義もアリだと思います。
ただ、サブクラスでproctice()メソッドを実装してもしなくても良い状態になってしまうので、そもそもスーパークラスで public void proctice(){} を書く必要がない気もしますね。
@@SekaChan ありがとうございます!非常にわかりやすかったです!自分はAndroid Studioでのアプリ開発をJavaで行いたいと思っています。今後Javaを用いたAndroidアプリを実際に開発する動画を見てみたいです。プロの方がどのようにクラスの設計を行い、オブジェクト指向をどの場面で使うのかが非常に興味深く参考にさせていただきたいです。ぜひ検討よろしくお願いします!
動画を見て勉強させていただいてます。4-7章での質問です。
Student6.javaの3行目、private Club Club はメンバー変数でclubオブジェクトを生成しているのでしょうか。
private Club club = new Club()ではないため、オブジェクトを生成しているわけではないのでしょうか。
申し訳ございません。解決いたしました。
もう一度見直すと動画で触れられておりました。
いつも参考になっております。ありがとうございます。
けんぴっぴさん、コメントありがとうございました!
ここはたしかに難しいですよね。でも、自分で疑問を解決できたみたいで良かったです!
入門講座の中では4章が一番難しいので、ここを乗り越えれば一気に視界が開けますよ👍
いつもお世話になっております!質問なのですが、1:39:18 あたりの説明で疑問だったのですが、実装と継承って同時にできるのですか?public class Baseball extend club impliments Englishable みたいに…
焼肉食べたいさん、コメントありがとうございました!
継承と実装は同時にできますよ😄書き方はその通りで、
> class A extends B implements C, D, ‥
と指定します。
@@SekaChan 丁寧にありがとうございます🙇♂️これからも動画視聴させていただきます🙇♂️
すごくわかりやすくて感謝の気持ちです。
まだまだわからないことたくさんありますが、この動画のおかげで少しでも解決できてスッキリしています。
ありがとうございます
ここは入門講座で一番難しいので、わからないことがあっても大丈夫ですよ👍
特に参照型の型変換とかポリモフィズムは、勉強を進めることで「そうだったんだ!」と思える部分もあります。
なので、ぜひその調子で楽しく勉強していってください!
いつもありがとうございます!今回も質問させてください。。
演習問題5-2に関してですが、そもそもpublic Taxi2(int no, int price)の
コンストラクタを作成する必要はあるのでしょうか?
public Taxi2(int no) {
super(no);
}
のコンストラクタを用意したところ同じ結果となりました。
this()の使用練習のためにあえて解答例のような記述にしているのでしょうか?
それとも別の理由はあるのでしょうか?
初学者のため的外れな質問でしたら申し訳ございません。
kskさん、コメントありがとうございました。
たしかに、今回の問題に限れば引数2つのTaxi2()コンストラクタは不要ですね。
メンバ変数priceにはデフォルト初期値として0が代入されるため、わざわざコンストラクタ内で0を代入しなくても同じように動作します。
ただ、今後別のプログラムでもTaxiクラスが使われるかもしれないという拡張性を考慮したら、Taxiのオブジェクト生成時に(ナンバーと)料金も設定できた方が便利です。
もちろん「this()の使用練習」という意図もありますが、実際の開発でもこういうケース(すぐには使わない機能だけど将来のために実装しておく)はよくありますよ👍
@@SekaChan ありがとうございます!理解できました!本当にいつもありがとうございます泣
引き続き配信楽しみにしています!
いつも有料級の分かりやすい動画を作ってくださりありがとうございます♪
さっそく質問ですが、抽象クラスとポリもフィズムのところでClubクラスがStudentクラスのスーパークラスというところが、
何故なのでしょうか? 継承されている訳では無く、Studentクラスのメンバ変数にClubクラスのインスタンスをもっているだけなので、疑問に思いました。
拙い質問ですが、お答え頂けると幸いです!
研人さん、コメントありがとうございました♪
この動画の中で、「ClubクラスがStudentクラスのスーパークラス」になるところはないかなと思います。
もし僕がそう解説してしまっているところがあればそれは間違いなので、その部分(時間)を教えてもらえるととても嬉しいです🙏
※板書で上のような記述がないことは確認しました
わざわざ調べて返信してくださりありがとうございます!
俺の勘違いかもしれませんが
1時間32分15秒のところが、
疑問点に思いました。
これから先も素晴らしい動画を見て勉強させて頂くので質問もまたよろしくお願いします!!
質問です。
40:00からのプログラミング演習の問題1について
Taxi1クラスの各メソッドでpriceに値を代入していく際、「this」を用いるのは間違いでしょうか?
例えばstartメソッドだと「this.price=420;」とする書き方です。よろしくお願いします。
「this.price」として値を代入しても大丈夫ですよ😄
実際に試してみてもらうと、コンパイル・実行ともにうまくいくと思います。
@@SekaChan
大丈夫なんですね!ありがとうございます!
すみません、質問があります。
1:22:XXくらいの、Studentクラス内のメンバ変数Club club;の理解があまりできなかったのですが、
String、intのようにClubという型が有るのでしょうか?(他の動画で解説されてたらすみません。)
アイリス大山さん、コメントありがとうございます。
この質問は他のコメント欄で回答しているので、そちらを確認してもらえると嬉しいです。
(@user-lj2jc8zy9hさんの「1:27:00のポリモフィズムについて~」の質問です)
@@SekaChan ありがとうございます!
1:27:00のポリモフィズムについてお伺いしたいことがあります🙇♂️
Student6のメンバ変数に
「private Club club」でオブジェクトを持たせてるとのことで、なぜこのような書き方をすることでClubオブジェクトを利用することができるのでしょうか??
基本編でやった変数・メソッドの利用で教えていただいた「オブジェクト名.変数名」という形をしているから利用できるという解釈で宜しいでしょうか??
また、1:42:05のBasballクラスのメソッドでSystem.ou.println("LANGUAGE")にしてはいけないのでしょうか?😰
さんかめはめさん、コメントありがとうございました。
> 「private Club club」でオブジェクトを持たせてるとのことで、なぜこのような書き方をすることでClubオブジェクトを利用することができるのでしょうか??
まず、自分で作った設計図クラスをもとにしてオブジェクトを作ることができますよね😄
例えば、
Student stu = new Student();
と書くと、stuはStudentクラスをもとにしたオブジェクトの変数となります。
これは、
int i = 10;
と比べて考えると、Studentはデータ型を表しているという見方もできます。
つまり、変数宣言は「データ型 変数名」と書きますが、このデータ型に自分で作った設計図クラスの名前を書ける、という考え方ですね。
メンバ変数に
private Club club;
と書くとClubオブジェクトを利用できるのは、
private int counter;
と書いてint型の変数を利用できるのと同じイメージです。
> BasballクラスのメソッドでSystem.ou.println("LANGUAGE")にしてはいけないのでしょうか?
このように記述すると「LANGUAGE」という文字列がそのまま表示されてしまいますね💦
@@SekaChan とても詳しくご回答していただいてありがとうございます!とてもスッキリしました!
LANGUAGEについては質問の仕方が間違っておりました🙇♂️
System.out.println(LANGUAGE)ではダメなのでしょうか??
また、自分でためしてみようかなと思うのですがふと気になりまして、、
@@user-lj2jc8zy9h さん、返信ありがとうございます。
もし自分で試していないのであれば、まずは試してみましょう👍
プログラミングは一度でコンパイルが成功することはあまりなく、エラーメッセージを読み取って解決する力が必要不可欠です。
そうやってコンパイラと会話する時間が、理解を深めるのに一番つながりますよ。
@@SekaChan ありがとうございます!
結局別のことに時間を割いてしまってまだ試せてないので、今日試してみます!
ありがとうございます🙇♂️
@@user-lj2jc8zy9h 私も同じ所を疑問に思いました。ありがとうございます。
勉強不足、聞き損じがあったら申し訳ありません💦
4章最初の演習問題の1番について質問なのですが、class Taxi1の8行目のprice +80 のpriceは上から処理を行っている為、現時点でstartのpriceが適用されて420が代入されるという認識で大丈夫でしょうか??
4章の演習問題、難しいですよね😄
Taxi1クラスの処理について、書いてくれた記述自体は間違えていないです。
ただ、もしかしたら誤解してるかもしれないので念のため補足しておくと…
「price + 80」でpriceに420が代入されるのは、DriveTaxi1クラスの5行目でstart()メソッドを呼び出した時点でt1オブジェクトのメンバ変数priceに420が代入されているためですね。
@@SekaChanなんとなく理解できてなかったモヤモヤがすっきり理解ができました!ありがとうございます🙇
1:23:18 Studentクラス二行目のClub clubとはどんな意味なんでしょうか
初学者で混乱してしまいました、回答よろしくお願いします
「Club club」のような書き方は、たしかに慣れるまで分かりにくいですよね‥
同じ内容がこちらのコメント欄でたくさん議論されてるので、ぜひ参考にしてみてください!
●【Java入門講座】4-7 抽象クラスとポリモーフィズム
ua-cam.com/video/tfrmaMGJtic/v-deo.html
ガチで思う、セカちゃんさんは神。
これ全部無料で見れるって…
トンコツ炒飯さん、コメントありがとうございました!
これからも有料レベルを超える授業動画を作り続けて、皆さんの背中を押していきますよ✨
this・superについて質問です。
this()やsuper()が両方無い場合、super()自動で挿入されるという事ですが
コンストラクタを記述した時点でsuper()が自動で挿入される状況にあるということでしょうか?
また、自動挿入されるからと、あえて書かない場合などありますか?
黒本に自動挿入を考慮する問題があり気になりました。
宜しくお願い致します。
2つの質問とも聞かれている意図がちょっと分からない部分はあるんですが、「コンストラクタを記述した時点でsuper()が自動で挿入される状況にある」という表現は、そうともいえるのかなという印象ですね。
また、「自動挿入されるからあえて書かない」というより、「this()やsuper()を呼び出す必要がない場合は書かない」というイメージでしょうか。
ありがとうございます
助かります!
すごく初歩的な質問かも知れないのですが…
試験問題でよく解答が選択式で、選択肢の中にコンパイルエラーなのか、実行時エラーなのか、というものがありますが、これらはどのように判別すれば良いのでしょうか?
どっちになるのかは状況ごと覚えるしかないのでしょうか?🤔
一般的に文法で間違ってたらコンパイルエラーになると言われるかと思いますが、static void maiとnが抜けていてもコンパイルが出来てしまいますね。文法以前の問題がコンパイルを通過してしまうので、何を基準にコンパイル/実行時エラーは決まっているんだろうと思ってしまいました🤔
lizm Vaioさん、コメントありがとうございました。
コンパイルエラーか実行時エラーか、状況ごとに覚えるのは正直不可能かなと思います(状況が無限にあるので‥)
Java Silverのような資格試験では結果を「覚える」のではなく、結果を「理解する」ことが重要です。
つまり、
> static void mai(String[] args){ ~ }
というメソッド定義でも、どうしてコンパイルが通るのか?を説明できる力をつけていきたいですね。
自分がコンパイラになったつもりで、プログラムのどの部分に文法的な誤りがあるかを見分ける意識で勉強を進めてみてください👍
自分がコンパイラになったつもりでΣ(´⊙ω⊙`)その発想はなかったです!本当に覚えるしかないと思ってたので、考え方変えて頑張ります✨
ありがとうございました🎶
本当にお世話になっています。50才オーバーで学習を始めた初学者です。 過去にも質問されているようですが、 4-7抽象クラスにおいて、 Club club で対象のオブジェクトを使用する とのことですが、 抽象クラスはインスタンス化できないので、抽象クラスを利用するには変数として宣言してから、それに対応する(インスタンス化された)オブジェクトを代入して使用する との理解になるのでしょうか? また、このように変数として宣言することで使用できるのは 抽象クラス以外(普通のクラス)でも可能なのでしょうか? トンチンカンな質問と理解かも知れませんが、ご回答頂けると幸いです。
永尾社長さん、コメントありがとうございました。
抽象クラスの変数にはそのサブクラスのインスタンスを代入することができる、というイメージですね(参照型の型変換が自動で行われています)。
このような仕組みがあるおかげで、Student6クラスのコンストラクタがTandFクラスのインスタンスとFootballクラスのインスタンスの両方を受け取れるようになります。
@@SekaChan ご回答ありがとうございます。「抽象クラスの変数にはそのサブクラスのインスタンスを代入することができる、というイメージ」なるほど! 抽象クラスを Club club のように宣言して使用することが理解できてきました。ありがとうございました。
Lesson5の演習問題2問目をビデオと同じコードでコンパイルしているつもりなのですが、
以下のようなエラーメッセージが出てコンパイルできません。
.\Taxi2.java:8: エラー: クラス Car2のコンストラクタ Car2は指定された型に適用できません。
super(no);
^
期待値: 引数がありません
検出値: int
理由: 実引数リストと仮引数リストの長さが異なります
エラー1個
Car2とTaxi2のコンストラクタの引数の数と合っていないということなのでしょうか?
谷冨誠一郎さん、コメントありがとうございました。
プログラムを見ないでエラーの原因を探るのは難しいですが、このエラーメッセージを読む限りでは「Car2クラスにint型を受け取るコンストラクタが用意されていない」ということのようですね。
つまり、Taxi2クラスではなく、Car2クラスにエラーの原因があると予想できます。
Car2クラスは提供ファイルをそのまま使う問題になっていますが、もしかしたら問題1のCar1クラスを(クラス名を変えて)再利用していないでしょうか😄
その場合でCar1クラスのsetNoメソッドをCar2のコンストラクタに変更し忘れていると、上のようなエラーが発生します。
このあたりを確認してみてください。
すぐに回答いただきありがとうございます。
もう一度よく確認してみます。
こちらの動画のおかげで、これまで本を読むだけではモヤっとしていたことが、ずいぶんクリアになってきたと感じています。
定年前のジジイですが、頑張りますので、素晴らしい理念の動画を作り続けて下さい。
初歩的な質問になりますが、開発環境を主にVScodeで行っていますが、ほぼプログラムの動きは同じという認識で問題ありませんでしょうか?
特別な設定をしていなければ、その認識で大丈夫です。
すみません、質問です student3クラスの13行println()のところですけど、どうして[this.StuNO]じゃないです。回答お願いします。
tetsuさん、コメントありがとうございました。
13行目はthis.stuNoとしても大丈夫ですよ😄
ただ、(7行目のコンストラクタと違って)display()メソッドには引数にstuNoがないためthisは省略可能です。
質問失礼します。
this・superの所ですが、ですが、
スーパークラス、サブクラスが、
public Person3(String name)
ですが、なぜコンストラクタにpublicの記載があるのでしょうか?
ご教授頂けると幸いです。
エラー: シンボルを見つけられません、となって実行できませんどうすればよいですか
kakikukeko “l.fuwamon.l” aiueoさん、コメントありがとうございました。
「シンボル」はクラスや変数、メソッドなどの名前を指します。
おそらく、エラーメッセージで見つけられないシンボルがあわせて表示されていると思います。
そのスペルが間違えていないか、どこかでしっかり宣言されているかなど「名前」に着目して調べてみてください😄
ありがとうございます
DriveTaxi2 をコンパイルすると実引数リストと仮引数リストが違うと出てきてCar2コンストラクタが適用できないとエラーが出てしまいます。(superで呼び出している部分です。)
しかし記述は全部答えと一緒のはずなので何が原因かわかりません。もし改善策があれば教えていただけますでしょうか。
この情報だけでエラーの原因を特定するのは難しいですが、「記述は全部答えと一緒」であれば、プログラム以外のところに原因がある気がしますね。
例えば、前のコンパイル結果が残っていて、それを実行しちゃっているようなケースとかが多いです。
前のやつのせいでした。すみませんありがとうございます
クラスが型みたいな使い方途中からされてるところからイマイチよくわからない。。
ストリングとかと同じ使い方ということなのでしょうか??
Class Person extends Student {
} 日本人からするとこちらにした方が「Personから拡張した Student 」感が大きいな。
海外発祥の言語はいつも違和感を覚える。
スマホの簡単なアプリを作ったりしたいんですけど、javaの書き方はすごく分かりやすいのですが、コマンドラインへ入力、コマンドラインへの出力で文章や計算結果が表示されるというのが、どのようにユーザーがスマホを操作してユーザーのスマホへ出力される、に置きかわるのかイメージがわかないです。
トンコツ炒飯さん、コメントありがとうございました。
コマンドラインベースのプログラムとwebブラウザベースのプログラムでは入出力の書き方が大きく変わるように、スマホベース向けのプログラムも新しい書き方を身につける必要がありますね。
スマホアプリに関する解説動画は作っていないので、「Java スマホアプリ」等で検索してみてください😄
@@SekaChan コマンドラインベースのプログラムは何に役立つんですか?
質問なのですが
import java.util.*
みたいな書き方はしてよさそうでしょうか?
せかちゃんさんが必要なものを選んで読み込んでくれるから良いかなって思ってたんですけど、テキスト見ると推奨されないって書いてて迷ってる感じです。
僕もインポートは「*」ではなく具体的なクラス名(インタフェース名)を書いた方が良いと考えています。
(どこかの動画で話した記憶はあるんですが、昔のことで忘れてしまいました‥)
ただ、初学者が使うときや同じパッケージからたくさんインポートするときは「*」を使っても問題ないのかなという感じですね。
Lesson10の問題3について質問です。
サンプルプログラムをコンパイルすると以下のようなエラーが発生しました。
↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓
Vehicle.java:3: エラー: クラスmypack.Vehicleが重複しています
public abstract class Vehicle{
^
UseVehicle.java:6: エラー: Vehicleにアクセスできません
Vehicle[] v = new Vehicle[3];
^
ソース・ファイル.\Vehicle.javaは不正です
ファイルにクラスVehicleが含まれていません
削除するか、ソース・パスの正しいサブディレクトリにあるかを確認してください。
Bus.java、Stopable.java、Taxi.java、Train.javaについても同様のエラーが発生しました。
試行錯誤の結果、UseVehicle.javaのインポートの部分「import mypack.*;」を以下のように変更すると無事にコンパイルすることができました。
import mypack.Bus;
import mypack.Stopable;
import mypack.Taxi;
import mypack.Train;
import mypack.Vehicle;
私の開発環境の設定の問題なのでしょうか?
「import mypack.*;」のままでも無事にコンパイルできるようにしたいと思うのですが、何か解決策があるようならお教えいただけるとうれしいです。
コメントありがとうございました。
エラーメッセージをすべて載せてもらえたおかげで、どんなエラーが発生したのかがよくわかりました。
ただ、それでもエラーの直接的な原因を特定するのは難しいですね‥
『クラスmypack.Vehicleが重複』とあるのでVehicleクラスを複数コンパイルしていそうですし、『ファイルにクラスVehicleが含まれていません』ということからVehicle.javaには違うクラスを書いていそうな感じもみてとれます。
おそらく、演習問題に取り組むときに一度作ったJavaファイルをコピペして新しいクラスを作っている(←これ自体は良いと思います)けれど、クラス名を変え忘れたりしてJavaファイルとクラスの対応やパッケージの関係が崩れてしまっている可能性がありますね。
classファイルをすべて削除して、正しいJavaファイルをコンパイルし直してもらうとうまくいくかもしれません。
@@SekaChan お忙しいところわざわざお返事ありがとうございます。
classファイルを削除して再挑戦しても結果は同じでした。
私の環境では無理のようなので諦めたいと思います。
ありがとうございました。
四章もありがとうございます^^
三章のご返信も、見進めていったら仰っていることがわかりましたd(^_^o)
*extendsや@override、super、thisみたいな形はDartにも出てくるので、理解の助けになりそうです
本当に呪文だったです笑
*Javaの勉強は先生のおかげで楽しいです!
「この言語はどんなことができるか」というのが大事なのと同じくらい、もしくはそれ以上、
「この言語にはどの先生がいるか」が大事な気がします。
自分用
------------------------------------------------------------------------------------------------------------------------------------------
11:04
*Overrideとは・・・サブクラスでスーパークラスの「メソッド」を再定義すること。条件を揃える。
20:00
setName(int n){
name=n;}
みたいな感じにしていたのを、
setName(int name){
this.name=name;}
とすることで、変数名をいちいち考えなくてよくなる。
25:22
なぜ
this"未設定"
で下のコンストラクタを呼び出せるのだろう?
this.name="未設定";
とかだったらわかる気がするけれど・・
と思ったけれど、そもそも、class()にはそう言う機能があるんだよ、と言う説明ですね^^;
と納得したところで思ったこと・・・同じclass内で例えばthis.dogやthis.starなどいろんな変数にthisを使っていた場合、this."未設定"はどのthisと繋がるんだろうか?
27:30
続き・・・this()はthis.dogみたいなのを呼び出すよりはコンストラクタ全体を呼び出すようなイメージみたい。
30:00
そういうことか〜〜〜!
じゃあ、コンストラクタを呼び出すと言うか、同じクラスを呼び出す感覚。()に引数を設定し直してクラスに引数として渡すと、結果としてその中に設置されている適当なコンストラクタに代入される。
36:47
「8行目でdisplayメソッドをオーバーライドしています。」
*superやthisを使うのは、基本的には、同じ変数名を使用するためだと考えて良さそう?
なぜなら、メソッドをpublicにして、クラスをextendsしておけば、違うクラスのメソッドでも呼び出せるはずだから。
いずれにせよ、三章と四章は繰り返し見るのが良さそう。
48:50 なるほど、その手が!
55:00
ここだけ間違えた!!
this superはコンストラクタ内の先頭に書くことになっている。それを書かないと、自動的にsuper();が挿入される。すると、この問題の場合、具体的には親クラスであるCarクラスが呼び出され、引数はないのでCar()コンストラクタが呼び出され、Car()と表示される。
57:00
型変換というか、クラス変換?
そして、型変換のときと逆な気がする。
1:04:00
なんでオーバーライドは有効なんだろう?
ないとさん、コメントありがとうございました!
もう4章まできたなんて進むのが速いですね。
たしかに、「誰に教わるか」って大切な気がします。
学校の授業でも、相性の良い先生に教えてもらえた科目はグンと伸びますからね。
Javaの楽しさが伝わっているようでとても嬉しいです😄
ここを乗り越えれば入門講座のゴールが見えるので、その調子で楽しみながら頑張っていってください!