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?

なぜJavaではインターフェースだけ多重継承が許されているのか

Posted at

はじめに

Javaではクラスの多重継承ができませんが、例外的にインターフェースのみ多重継承が許されています。なぜこうした例外が許されているのでしょうか。

初心者向けの記事です。なぜこんな言語仕様にしたのか、といった話はしないのでよろしくお願いします。

多重継承ができない理由

一言で言うと親クラスが同名のメソッドを持っていた場合、子クラスの処理内容に矛盾が生じる可能性がからです。

便宜的にParent1とParent2の2つのクラスを用意します。

public class Parent1 {
    public void sing() {
        System.out.println("演歌を歌う");
    }
}

public class Parent2 {
    public void sing() {
        System.out.println("ロックを歌う");
    }
}

2つのクラスは同名のsingメソッドを持っていますが、処理内容が異なります。
もし、Parents1とParents2の2つを多重継承する子クラスが存在する場合、singメソッドはどうなるでしょうか?結論、どちらの親のsingメソッドの処理を優先してよいか分からず、処理内容が定まりません。

インターフェースの多重継承が可能な理由

一言で言うと、親クラスが同名のメソッドを持っていても、処理内容が未定義なので、小クラスの処理内容に矛盾が生じないからです。

上記のParent1とParent2をインターフェースにすると下記になります。singメソッドが未定義なので実質同じメソッドになります。そのためParent1とParent2を同時に継承したとしても、クラスの多重継承のようにメソッドの処理が矛盾しません。このため、インターフェースの多重継承が許されているのだと思います。

public interface Parent1 {
    void sing();
}
public interface Parent2 {
    void sing();
}

参考資料

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?