はい、9日目の続きです。
インナークラスを無事になんとなく理解することができた僕は、Tim先生(YouTubeで解説してくださっている方)に従い、次なる敵「Interface」と戦うことに。
Tim先生の解説は、最初に書いたブログ
「Javaはじめました!!」
https://aki-be-pro-engineer-rec-myroute.com/2025/02/09/java%e3%81%af%e3%81%98%e3%82%81%e3%81%be%e3%81%97%e3%81%9f%ef%bc%81%ef%bc%81/
で書いている通り、英語をYouTubeの自動翻訳機能で、翻訳してもらいながら聞いています。
何が言いたいかというと、ちょいちょいと自動翻訳が変な翻訳になっていることがあるのです、、
なので、今日から新しい内容を学ぶ時は、Tim先生の説明を聞く前にAI先生に概要を聞くことに。
ということで、今回、目の前に現れた敵「Interface」の概要をAI先生に尋ねました。
ふむふむ、Interfaceとは、「どんな行動ができるか」をまとめた設計図のようなもの」ということか。
メリットは、、、
★設計が分かりやすくなる
どのクラスが特定の行動を行えるのかが分かりやすい
★柔軟性アップ!!
新しいインスタンスを追加する時も、Interfaceで定義したメソッドの型を使うことで効率UP!!
修正も行いやすい
★多重継承ができる
クラスの継承では、子クラスは、1つの親クラスしか持てないけど(親クラスは、無限に子クラスを
持てる)Interfaceは、継承元の数に制限がなく、多重継承ができる。
クラス側から見ても、複数のInterfaceからメソッドを継承することができる。
なるほどなるほど、、
そんなInterfaceをAI先生は、ゲームの必殺技に例えて説明してくれました。
(ゲームの必殺技の例え)
Interfaceで、「必殺技を使えます」というメソッドを定義
↓
クラスでキャラクターを定義して、それぞれのキャラクターにInterfaceで定義した、
「必殺技を使えます」を取り込ませる
↓
クラスで定義した各キャラクターに、キャラクターに「必殺技を使えます」を取り込ませた結果の行動を定義する。
↓
メインクラスで実行!!
(Inter face)
interface Specialskill{
void useSkill();
}
(class 「キャラクター」)
class Hero implements Specialskill{
public void useSkill(){
System.out.println(“勇者はキン肉バスターを発動した”);
class Wizard implements Specialskill{
public void useSkill(){
System.out.println(“魔法使いはタワーブリッジを発動した”);
}
}
おぉー!!
めちゃめちゃよく分かった!!
implementsは、比較の時に学んで、2つの型を繋げる(動作を約束する)役割だと理解している。
ここは、もう一回復習しておこう。
とにかく、AI先生のおかげで気持ちよくTim先生の動画を見れるぞ!!
Timさんの動画では、Interfaceを、車の展示を例として説明していた。
(Interface)
public interface Vehicle{
final int gears = 5;
void changeGear(int a);
void speedUp(int a);
void slowDown(int a);
}
おっと、、、
いきなり「final」とか訳が分からんやつが出てきたぞ、、、
Tim先生は、「絶対に変更することができない」というふうに説明されていたけど、結局、どこで機能していたのか、最後までよくわからんかったな、、
あと、定義した3つのメソッドのintの値はなんで全部同じにしてるんだろう、、
後日、詳しく勉強しよう!!
(class Car)
public class Car implements Vehicle{
private gear = 0;
private speed = 0;
public void changeGear(int gear){
this.gear = gear;
}
public void speedUp(int change){
this.speed += change;
}
public void slowDown(int change){
this.speed -= change;
}
public void display(){
System.out.println(“I am a car,going” + +this.speed + “km/h and I am in gear” + this.gear);
}
}
なんとなくは分かるけど、、
これまでも幾度か出現した「this.」っていうのが、イマイチ理解できない、、
this.とすると、最初に定義したクラスの変数を取り込むのかなって感じで理解しているけど合ってるのかな、、
これも後日勉強!!
(main class)
car ford = new car();
ford.speedUp(10);
ford.chargeGear(2);
ford.display();
↓
I am a car,going 10km/h and I am in gear 2
うむ、無事にエラーが出ずに処理された。
newは前回ブログで書いたように、しっかりと理解できているから大丈夫!!
ただ、、、
System.out.println
を使ってコンソールに表示させる時と、
○○.メソッド名()
のみでコンソールに表示させる時の違いがよくわからん、、
後日勉強!!!
そして、Interfaceの回の最後に、Tim先生が教えてくださった「default」
これ、結構便利ちゃう!?
Interfaceの中で、メソッド定義の下に、
default void out(){
System.out.println(“Default methid”);
と入力すると、、、
class Carの一番下に、
out();
と入力するだけで、Interfaceのdefault void out() を呼び出せるらしい!!
うん、これももう一回詳しく勉強!!
Timさんが説明の中で言っていた「静的メソッド」、、、
これがほんまにわからん、、
明日は、これをAI先生に聞くところから始めることになりそう。
【今回のまとめ】
★Interfaceの概要、メリット、使い方が分かった!!
★コーディングを真似することで、処理の流れが分かった
★final、default、implements、this.は詳しく勉強し直し!!
★静的メソッドってなんやねん、、
明日も楽しもう!!!