Mainクラス
※bulldogクラスがDogクラスを継承しているものとする ※自分が分かりやすく簡潔に書いているため一部コードを省略しています
インスタンス生成
こちらがインスタンスを生成するコードである
単数生成
Dog sample = new Bulldog();
複数生成
Dog sample = {new Bulldog(), new Chihuahua()};
オブジェクトを分け説明すると以下のようになる
インスタンス化 コンストラクタ Dog sample = new Bulldog();
Dogクラスのメンバを使用するがBulldogのコンストラクタでフィールドを操作している
インスタンス使用
こちらがインスタンスを使用するコードである
sample.メソッド名();
サブクラス
サブクラスの書き方
public class Bulldog { //フィールド(基本修飾子protected) 変数を置く //コンストラクタ(基本修飾子public) newでインスタンス化した際に変数を操作する //メソッド(基本修飾子public) クラス独自の処理を書く }
オブジェクトなクラスの関係性
クラス同士の関係性について図でまとめてみた
継承
継承(extends)とは...スーパークラスのメンバを利用するためのもの
影響→スーパーメソッドを利用できるようになる
使う場面
インスタンス化(↓)をする際
Dog sample = new Bulldog();
サブクラスのコンストラクタ(↓)から
public class Bulldog extends Dog { //コンストラクタ Bulldog (String name) { super(name); } }
スーパークラスのフィールド(↓)を設定できる
public class Dog { //フィールド String name; }
これにより呼び出した実行の内容は同じだが出力結果はサブクラスのコンストラクタで操作した独自のものになる(=ポリモーフィズム)
抽象
抽象(abstract)とは...サブクラスのOverrideを義務付けるもの
影響→メソッドにabstractを付けるとクラスにもabstractを付ける義務が発生
使う場面
以下のように出力させたい
ブルドック:ガルルルル
インスタンス生成でブルドックという名前を送信
Dog bulldog = new Bulldog("ブルドック");
ブルドックのbarkメソッドをスーパークラスで出力しようとする
bulldog.bark();
スーパークラスにはbarkメソッドがあるが
//フィールド String name; //メソッド public void bark() { system.out.println(name + ": ???"); }
Dogクラスではブルドック専用の鳴き声を書けないため、【サブクラスでのオーバーライドが必須】になる
インターフェース
インターフェース(implements)とは...クラスの仕様を定義するもの
影響→そのクラスと継承関係があるクラスも実装する義務が発生する
使う場面
複数のインターフェースを実装することが可能 複数の仕様を実装可能なので任意の種類のOverrideを義務付けることが可能