こんにちは、あおです\(^0^)/
最近寒いですよねー。皆さんは体調管理にちゃんと気を付けてますかー?
私はこう見えて昔サッカー部だったので体力には自信あるつもりなのですが。
衰えが色々な箇所で実感できてしまって、困ってます。
でも風邪は滅多にひかない!熱が出ることはほんと稀です。
たまに咳と鼻水が酷くなる時はあります…。
しかも私冷え性なので冬は嫌いです((((;゚Д゚))))
早く温かい季節になってほしいですよねー(><)
つい先日トラブルに見舞われてですね…。
私は早いと朝5時頃に起きるのですが、その日は仕事行く前に洗濯をしようと思いました。
引っ越してからの初洗濯だったのですが…。
「ビシャー」
スイッチを押した途端、給水ホースと蛇口が繋がっている根元から大量の水が大噴射してきてですね…。
ガスの開栓が終わったはずなのに、今度はキッチンで水風呂に入るとこでした(笑)。
「なんで溢れるん( ^ω^)」
原因不明です。私の力では修理不能でした。でもその日どうしても洗濯がしたかったので、
ちょびちょび水を出しながら洗濯をしましたが…。
「手で洗った方が早い!!!!!」
終わった後心の中で思いました。
雑談はここまで!本日の研修内容を書いていきます。
◆本日の内容
最近はずっとSQLの課題をやっていましたが、今日はJavaの課題を久々に取り組みました。
取り組んでみると…。しばらくJavaのコードを書いていなかったので忘れていることが多かったです(笑)。
一度習ったことを忘れていたりしたので、思い出したり調べながら取り組みました。
今日は主に以下の内容を学習いたしました
・継承課題
・抽象クラス課題
◆所感
抽象…。便利な機能であるのですが、結構混乱した内容でした…。コンストラクタにインスタンス化…。
オーバーライドとオーバーロードの違いを再確認したり…難しい(- – ; )
~冒険者クラス(抽象クラス)の継承~
public class Main { //メインクラス public static void main(String[] args) { Warrior war = new Warrior("戦士","神野"); //戦士クラスのインスタンス化、引渡し Wizard wiz = new Wizard("魔法使い","尾田"); //魔法使いクラスのインスタンス化、引渡し war.selfIntroduction(); //戦士クラスの自己紹介メソッド呼び出し war.skill(); //戦士クラスのスキルメソッド呼び出し System.out.println(""); wiz.selfIntroduction(); //魔法使いクラスの自己紹介メソッド呼び出し wiz.skill(); //魔法使いクラスのスキルメソッド呼び出し } } abstract class Adventurer{ //冒険者クラス(スーパー) abstractで抽象クラス protected String type; //一部外部に公開している、種族(type)のフィールド protected String name; //一部外部に公開している、名前(name)のフィールド public Adventurer(String type,String name) { //コンストラクタ(種族と名前が代入される) this.type=type; //thisでtypeを宣言 this.name=name; //thisでnameを宣言 } public abstract void selfIntroduction(); //抽象メソッドとして、自己紹介メソッド呼び出し public abstract void skill(); //抽象メソッドとして、スキルメソッド呼び出し } class Warrior extends Adventurer{ //戦士クラス(子、冒険者クラス継承) public Warrior(String type, String name) { //コンストラクタ(種族と名前が代入される) super(type, name); } public void selfIntroduction() { //戦士クラスの自己紹介メソッド System.out.println("我は"+ this.type +"の"+ this.name +"だ"); } public void skill() { //戦士クラスのスキルメソッド System.out.println("二連斬り!!"); } } class Wizard extends Adventurer{ //魔法使いクラス(子、冒険者クラス継承) public Wizard(String type, String name) { //コンストラクタ(種族と名前が代入される) super(type, name); } public void selfIntroduction() { //魔法使いクラスの自己紹介メソッド System.out.println("私は"+ this.type +"の"+ this.name +"です"); } public void skill() { //魔法使いクラスのスキルメソッド System.out.println("ファイアーボール!!"); } }
インスタンス化やコンストラクタは混乱することがよくありますが、だいぶ使い慣れてきました。
まず抽象クラスとは22行目に記載されている冒険者クラスが抽象クラスなのですが…。このクラス名の
前に書かれている abstractが抽象クラスであることを意味します。また抽象クラスは抽象メソッドを必ず
1つ以上持っています。
ではこの抽象メソッドをもつ理由はなんなのか…。それはこの抽象クラスを継承したクラスは
抽象メソッドを必ずオーバーライドし、クラスごとに処理内容を記述するためです。
これは抽象クラスを継承したクラス(サブ)は、処理内容を別々に記述することが
できることを意味しています。
今回は、冒険者クラス(親、抽象クラス)を継承した戦士クラス(子)と魔法使いクラス(子)は
まず初めにsuperをもちいてコンストラクタをしています。コンストラクタ実行後、34行目と36行目に
記載されている抽象メソッドにあったメソッドをオーバーライドしています。そしてその
オーバーライドした後は処理内容が職業によって異なっています。今回は2つでしたが
武闘家、勇者、僧侶など増えれば増えるほど、オーバーライドの利便性を実感することが
できると思いました。
◆一言
頭の中で「こんなコードをかきたい」とイメージする習慣が少しだけですが身についてきた気がします。
今後も考えながらコードを書く習慣は意識したいと思います。
またどういったときに使う言葉なのか、コードなのかを説明できるようにもなりたいと思いました。
次回も引き続き「Java課題」について記載したいと思っております。
では皆さん、次回のブログまでさようなら(*’ω’*)