6日目⑤(2025.02.05)<継承>


まだ6日目の復習は終わりません!!

次は「Inheritance (継承)」です。

ということで、Tim先生よろしくです!!

Inheritance(継承)とは、
新しいクラスを作成し、メソッドを上書き(または新たに書き込む)したりすることで、
時間短縮に繋がるとのことです!!

classの活用の時に使ったdogクラスを継承してCatクラスを作成することから始まりました。

Cat classを作成

public class Cat extends dog{

これで、class Catは、class dogを継承するという設定ができたみたいです!!
この設定をすると、Catの下に下線が出て、クリックすることで自動的に、

public Cat(String name,int age){
super(name,age);
}


と出ました!!

おおー、なんかすごい!!


Tim先生の話の中で、「インスタンス化」というワードが出てきて「?」となったので、ちょっと調べました!!

インスタンス化:
クラスという設計図(名前・年齢の情報等を定義)から、実際に使えるオブジェクト(インスタンス)(名前や年齢のデータ)を作り出す作業


ということで、コーディング!!
Catクラスにdogクラスから継承したメソッドに加え、新たにメソッドを作ります!!

(class Cat)

public class Cat extends dog{
private String food;

public Cat (String name,int age, String food){
this.food = food;
}

public void speak(){
System.out.println(“私の名前は” + name + “です。” + “年齢は” age + “歳です。” +
  “好きな食べ物は” + food + “です。);


最後のSystem~
のところで、「name」と「age」が定義されていないということでエラー出ましたが、これは、
class dogでnameとageを定義しているところが「private」になっていたからでした。
(めちゃくちゃ頭抱えて悩んでました)
publicに変えたらエラーが消えました。

(main class)

Cat ジャンクマン = new Cat(“ジャンクマン”,20,”ジャンククラッシュ”);

ジャンクマン.speak();



私の名前はジャンクマンです。年齢は20です。好きな食べ物はジャンククラッシュです。



ちゃんと出ました!!

めっちゃスッキリ!!

(当然ですが、Tim先生が書いたコードは全部英語です。英語ばかりで煩わしくなったので、勝手に日本語で書いただけです)

【全てのパラメーターではなく、一部のパラメーターのみを表示させることもできる】

【protected(保護)】

なんかこんなことを書いてたんですが、最後に
「今はこの程度として、いつか勉強する」

とかいう謎の一文が添えられていました。





ということで、今(2月13日)勉強します!!


(勉強結果)

★一部のパラメーターのみを出力する

現状、class Catのspeakメソッドで名前と年齢と食べ物を一緒に出力しているところを、

public void speakName() {
System.out.println(“私の名前は” + super.name + “です。”);

public void speakAge() {
System.out.println(“年齢は” + age + “歳です”);

public void speakFood() {
System.out.println(“好きな食べ物は” + food + “です”);


みたいにして、

mainクラスで、出力したいものを特定するってことかな、、、

一応できたけど、Tim先生がおっしゃっているのってこういうことなのかな、、、

あと、今まで習ったやつを使ってちょっと変えてみました!!






なんか自分なりにアレンジしたりしてうまく出力した時ってめっちゃ嬉しい、、、


★protectedについて

こちらは、AI先生に聞きました!!

(AI先生より)

protectedは、カプセル化を少し緩める鍵。
protectedは、クラスのメンバ(変数やメソッド)へのアクセス制限を指定するアクセス修飾子の一つ。
カプセル化を理解するうえで重要な役割を持つ。

カプセル化とは??
カプセル化は、オブジェクト指向プログラミングの重要な概念で、データ(変数)と操作(メソッド)をまとめて保護することを指す。

protectedの役割:
protectedを指定されたメンバは、以下の範囲からアクセス可能
・同じパッケージ内のクラス
・違うパッケージでも、そのクラスを継承した子クラス
→仲間内ならアクセスオッケー!!

prtectedメンバは、外部からは直接アクセスできないけど、privateよりは制限が緩く、publicよりは少し制限が厳しい。

クラスを利用する他のクラスに対して完全に公開はしたくないけど、継承したクラスからはアクセスできるようにしたい場合に便利。
これにより、クラスの内部構造をある程度隠しながら、特定のクラスやサブクラスからの柔軟な利用を可能にする。


おおー!!

なるほど!!

確かに、dogクラスのnameやらageをprivateにしたら、Catクラスでアクセスできなかったけど、
protectedにしたらアクセスができた!!

ということで、この記事はここらへんで!!

まだ6日目は続きます、、、

6日目頑張ったな、、、


ではでは!!


コメントを残す