Почему в Java нет множественного наследования, но разрешена реализация нескольких интерфейсов? - PullRequest
140 голосов
/ 25 марта 2010

Java не допускает множественное наследование, но позволяет реализовать несколько интерфейсов. Почему?

Ответы [ 16 ]

1 голос
/ 13 мая 2018

Например, два класса A, B, имеющие одинаковый метод m1 (). И класс C расширяет как A, B.

 class C extends A, B // for explaining purpose.

Теперь класс C будет искать определение m1. Во-первых, он будет искать в классе, если он не нашел, тогда он будет проверять в классе родителей. Оба A, B имеют определение. Итак, здесь возникает неопределенность, какое определение следует выбрать. Так что ЯВА НЕ ПОДДЕРЖИВАЕТ МНОГОКРАТНОЕ НАСЛЕДОВАНИЕ

0 голосов
/ 05 января 2018

* Это простой ответ, так как я новичок в Java *

Рассмотрим три класса X, Y и Z.

Итак, мы наследуем как X extends Y, Z И Y, и Z имеют метод alphabet() с одинаковым типом возвращаемого значения и аргументами. Этот метод alphabet() в Y говорит отображать первый алфавит , а метод алфавита в Z говорит отображает последний алфавит . Таким образом, здесь возникает двусмысленность, когда alphabet() вызывается X. Говорит ли он для отображения первый или последний алфавит ??? Так что Java не поддерживает множественное наследование. В случае интерфейсов, рассмотрим Y и Z в качестве интерфейсов. Таким образом, оба будут содержать объявление метода alphabet(), но не определение. Он не скажет, отображать ли первый или последний алфавит или что-то еще, но просто объявит метод alphabet(). Так что нет причин поднимать неопределенность. Мы можем определить метод с чем угодно внутри класса X.

Таким образом, одним словом, определение интерфейсов выполняется после реализации, поэтому нет путаницы.

0 голосов
/ 23 января 2017

Java не поддерживает множественное наследование, многолучевое и гибридное наследование из-за неоднозначности Проблема:

 Scenario for multiple inheritance: Let us take class A , class B , class C. class A has alphabet(); method , class B has also alphabet(); method. Now class C extends A, B and we are creating object to the subclass i.e., class C , so  C ob = new C(); Then if you want call those methods ob.alphabet(); which class method takes ? is class A method or class B method ?  So in the JVM level ambiguity problem occurred. Thus Java does not support multiple inheritance.

множественное наследование

Ссылка: https://plus.google.com/u/0/communities/102217496457095083679

0 голосов
/ 21 апреля 2015

Рассмотрим сценарий, в котором Test1, Test2 и Test3 представляют собой три класса. Класс Test3 наследует классы Test2 и Test1. Если классы Test1 и Test2 имеют один и тот же метод, и вы вызываете его из дочернего объекта класса, будет неоднозначность для вызова метода класса Test1 или Test2, но такой неоднозначности для интерфейса не существует, поскольку в интерфейсе нет реализации.

0 голосов
/ 25 марта 2010

Возьмем, к примеру, случай, когда у класса A есть метод getSomething, а у класса B - метод getSomething, а класс C расширяет A и B. Что бы произошло, если бы кто-то вызвал C.getSomething? Нет способа определить, какой метод вызывать.

Интерфейсы в основном просто указывают, какие методы должен содержать реализующий класс. Класс, который реализует несколько интерфейсов, просто означает, что класс должен реализовывать методы из всех этих интерфейсов. Это не приведет к каким-либо проблемам, описанным выше.

0 голосов
/ 25 марта 2010

Потому что интерфейс - это просто контракт. А класс на самом деле является контейнером для данных.

...