相続(Incheritance)の定義
相続は、クラス間の上下関係で抽象的なスーパークラス(SuperClass)または親クラスからサブクラス(SubClass)または子クラスを作ることで、相続という関係を通じて階層構造を形成
相続特徴
1.スーパークラスで定義されたフィールドとメソッドを引き継ぐ
2.新しいフィールドやメソッドを追加できる
3.スーパークラスから受け継いだメソッドを修正できる = Overriding
4.同一スーパークラスを相続するすべてのサブクラスはタイプ互換性がある
5.2つ以上のクラスを同時に相続する多重相続はサポートされません
オーバーライディング(Overriding)
定義:スーパークラスから相続したメソッドを再定義すること
メソッドの名前とリターンタイプ、印字などがすべて同一でなければならず、異なる場合は新しいメソッドが追加される形式
オーバーライディングによりオブジェクト指向の特徴の一つである多形成の実現が可能
例えばフルーツクラスがあっておいしい()というメソッドがあるとしたら、フルーツクラスを引き継ぐイチゴとブドウがクラスを作る場合、おいしい()メソッドのオーバーライディングによって異なる動作を可能にすることができます。
class Fruits {
void Delicious() {
System.out.println("何でも");
}
}
class Strawberry extends Fruits {
void delicious() {
System.out.println("何でも2");
}
}
class Grape extends Fruits {
void delicious() {
System.out.println("何でも3");
}
}
次のようにフルーツクラスタイプでイチゴクラスのインスタンスを生成しておいしい()メソッドを呼び出すと何でも2が出力されます。
Fruit fruit = new Strawberry();
fruit.delicious();//何でも2
イチゴの代わりにフォードインスタンスを生成すると、同一コードで何でも3が出力され、同じ構造で他の動作を実現できるようになります。
抽象クラス(AbstractClass)の定義
抽象メソッド(abstractmethodを含むクラス
具体的でない内容を定義したメソッドのこと
特徴
1.抽象メソッドと定義されたメソッドは、サブクラスで必ずオーバーライディングして実装しなければなりません。
2.抽象クラス自体はnewを通じてインスタンスにすることはできず、必ず相続して具体的なクラスを作って使用しなければなりません。
3.抽象クラスは抽象メソッド以外に他のメソッドを含めることができれば、メンバーフィールドも持つことができます。
abstract class Fruit {
abstract void Delicious(){};
}
参考までにメソッドのabstactと{}は省略可能
インターフェース(Interface)の定義
何かをつなぐためのつながり
定数と抽象メソッドのみで構成された形態
抽象メソッドのみで構成されるため、それ自体は何の機能もしませんが、まるで設計図のように今後具現されるクラスを連結して使用できる基盤構造を提供しています。
メンバーフィールドはすべてpublicstaticfinalのみ可能で、制御者は省略可能。
すべてのメソッドはpublicabstractのみで、制御者は省略可能。