LoginSignup
0
0

More than 1 year has passed since last update.

Javaにおけるインターフェースについて

Last updated at Posted at 2021-11-27

Javaにおけるインターフェースとは


→「定義が曖昧すぎて、特別扱いされた抽象クラス」のこと。
例:Creature(生き物)クラス
→形、生態はさまざま。
  生きるために、「run(逃げる)」くらいしかできない。



*特別である理由*
・内部実装(メソッドの処理動作)を一切定義しない
→同じ階層の親メソッド同士がぶつからないため、多重継承OK とされている。

特徴

①すべてのメソッドが、抽象メソッドであること
②フィールドは基本的に持たない
③もし、インターフェース内でフィールドを宣言すると、自動的に「public static final」が補われ、定数を宣言したことになる
④多重継承OK
⑤defaultを用いれば、抽象メソッドの実装が可能(java8〜) → 実装がぶつかる恐れがあるので、基本的にはしない
⑥インターフェースに宣言されたメソッドは、自動的に「public」かつ「abstract」になる。 →「public abstract」は省略OK

※abstract = このクラス(メソッド)は抽象クラス(メソッド)ですよ、という意味を表す

正しい継承ツリーを上に辿っていくと起こる現象

抽象メソッドが現れる
→抽象メソッドばかりになる
→抽象メソッドが減りはじめる
→抽象メソッドだけになる = インターフェース

インターフェースは、クリーニング店のメニューみたいなもの。
ユーザーには、どのようにして洗うか明示されない。

インターフェースの宣言

public interface インターフェース名 {
 //anycode
}

インターフェースの実装について

・インターフェースで定義されたメソッドは、全て抽象メソッドなので、
 それぞれオーバーライドする必要がある
・具体的な処理内容を実装する

※オーバーライド:親クラスのメンバを子クラスで上書きすること

インターフェースの実装

public class クラス名 implements インターフェース名 {
 //anycode
}

※implements = 実装する

インターフェースの効果

・同じインターフェースをimplementsする複数の子クラスたちに、共有のメソッド群の実装を強制できる
・インターフェースが定めたメソッドを、共通で持たせることができる

インターフェースによる多重継承

public class クラス名 implements 親インターフェースA , 親インターフェースB {
 //anycode
}

インターフェースの継承

親インターフェース Creature 
public interface Creature {
   public abstract void run();
}
上記の Creatureインターフェースを継承した、Humanインターフェース
public interface Human exetends Creature {
   void walk();
   void eat();
  //さらに、親インターフェースからrun()を継承する

まとめ

抽象クラス

・具体的な中身を決定できない曖昧なメソッドには、「abstract」をつけて、抽象メソッドとする
・抽象メソッドを一つでも含むクラスは、「abstract」をつけて、抽象クラスにしなければいけない
・抽象クラスは、インスタンス化不可
・抽象クラスと抽象メソッドを活用した「継承の材料」として、親クラスを開発すれば、イレギュラーなインスタンス化やオーバーライドを忘れる心配がない

インターフェース

・抽象クラスのうち、基本的に抽象メソッドしか持たないものを「インターフェース」として定義OK
・インターフェースは、多重継承OK
・インターフェースを親に持つ、子クラスの定義は、「implements」を使用する

0
0
3

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0