11?5?(?)
今日学習したのは
- 抽象クラス
- インタフェース
について学習しました!!
これまで学習してきたクラスは、処理内容を記述したメソッドを定義し、インスタンス化して使用できるクラスでした。
このようなクラスを「具象クラス」と呼びます。
それに対するのが、処理内容を記述しないメソッドを定義した「抽象クラス」と呼びます。
処理内容を記述しないメソッドが「抽象メソッド」と呼びます。
この2つのクラスは何が違うのか。
大きな違いとしては、宣言の仕方にあります。
class SarubeeA { }
abstract class SarubeeB { }
上は今までのクラスの宣言です。
下が抽象クラスの宣言になります。
違いとしては「abstract」というと記述の有無ですね。
その他の違いとしてはインスタンス化できないということです。
抽象クラスを利用するためには、抽象クラスを継承したサブクラスをインスタンス化することです。
ではなぜインスタンス化できないクラスがあるのでしょうか?
抽象クラスを持つサブクラスは必ず抽象クラスにある抽象メソッドをオーバーライドしなければいけません。
そのような仕組みにすることにより、コンパイルエラーを知ることができ、
コーディングミスを避けることができるのです。
便利な機能ですね。
次にインタフェースです。
インタフェースとは、「公開すべき必要な捜査をまとめたクラスの仕様」と記述がありました。
よく分からん、、、
説明を読み進めると、クラスのように宣言できて、抽象メソッドを定義することができるそうです。
なんか抽象クラスと同じような感じですよね。
抽象クラスと違うのは「デフォルトメソッド」を定義できるということです。
デフォルトメソッドは
public default int sarubee() { }
のように記述します。
defaultという記述を追加するだけですね。
以前まで抽象メソッドしか定義できなかったのが、
defaultと仕様することで具象メソッドを定義することができるようになりました。
本日はここまで!!
抽象クラスとインタフェースってややこしいです。
正直理解しきれませんでした。
ここは何度か復習しようと思います。
それでは皆さんまた明日!!