0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

初心者から始めるJava、インターフェイス

Last updated at Posted at 2020-03-22

#はじめに
この記事は備忘録である。
参考書レベルの内容だが、本記事に掲載するコードについては、
間違えたものが中心となる。これは実際にコーディング中に間違えた部分を掲載し、自分で反省するために投稿するという目的によるもの。
また、後日にJavaSilver試験問題の勉強を兼ねて復習するため、深い部分の話はここでは触れない。

##環境
言語:Java11、JDK13.0.2
動作環境:Windows10

#インターフェイス
前回扱った抽象クラスと似た使い方をする、インターフェイスという機構がある。抽象クラスはクラスの一種だった、インターフェイスも似た目的で作られるがその宣言・実装方法は異なる。

declareInterface.java
interface Felidae
{
  String type = cats;
  void meetsCats();
}

いつものclass宣言がなくなり、代わりにinterfaceになっている。クラス同様、フィールドとメソッドを持つことが出来る(コンストラクタを持つことはできない)が、
Felidae cat=new Felidae();のようなオブジェクトの生成はできない。またvoid meetsCats()は抽象メソッドのため、Felidaeインターフェイスを実装したクラスによってその具象メソッドを用意する必要がある(オーバーライド)。

String type = cats;はインターフェイスのフィールドだが、これは定数であり変更が効かない。インターフェイスのフィールドには、public static finalがついていることと同じ状態であるためだ(なぜそうなっているか僕はまだ分かっていない)。

inplementedFlidae.java
class Housecat inplements Felidae
{
  void meetsCats()
  {
    System.out.println("猫を発見したよ。多分どこかのイエネコだと思う。");
  }
}

拡張のextendsではなく代わりにimplementsになっているが、形としては今までと変わりない。
##原則:スーパークラスはひとつだけ
なぜ抽象メソッド・インターフェイスが必要になるのか。すべてクラス拡張で済ませればいいと思うのだが、Javaは複数のクラスによる多重継承を認めていない。親であるスーパークラスは1つだけに制限されている。人間の考える系統図と同じように考えてはいけないようだ。
その理由を少し見たが、メソッド名がかぶったときの呼び出しとか菱型継承問題(diamond problem)とか、何やらここには深みがあるようだ。なおC++という別言語はこの多重継承を認めている。

しかし、一度用意したものを使えないのは厳しいものがある。そこで、クラスによる多重継承の代わりに、抽象クラスやインターフェイスによる部分的な多重継承のみを許すことで言語としてのシンプルさを保とうとしている。
インターフェイスの実装は2つ以上で行うことが出来る。また、インターフェイス自体を拡張し、サブインターフェイスにスーパーインターフェイスをextendsすることはできる。

#終わりに
拡張による継承が許される部分を追ってみると、Javaは演繹的な展開が得意な言語なのかなと感じる。すでに出来上がったクラス・インターフェイスを知り、その機能を継承しながら新しいクラスを組み上げることを想定しているということは、まず標準ライブラリが用意した機能を知るところからJavaの勉強は始まるのだろう。

#参考
出来るだけ自分で変数や式を書いてコンパイルしているので、完全に引用する場合はその旨記述する。

やさしいJava 第7版
Java SE11 Silver 問題集(通称黒本)

0
0
0

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

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?