2015-03-31 3 views
0

связанный с этим вопрос: reference to valueOf is ambiguousЯвляется ли метод ссылкой неоднозначным так же, как множественное наследование?

ли эта ситуация такой же фон, как, почему мы можем только расширить один класс, потому что если бы мы могли продлить два класса, для всех статических полей и т.д., называние может вызвать те же проблемы?

Из вики:

своей повышенной сложности и неоднозначности в таких ситуациях, как «проблема алмазов», где она может быть неоднозначным, какой родительский класс конкретный признак наследуется от того, если более чем один из родителей класс реализует сказал особенность

+0

Возможный дубликат [Почему множественное наследование не разрешено в Java или C#?] (Http://stackoverflow.com/questions/995255/why-is-multiple-inheritance- не разрешенные-в-Java-или-C). На самом деле в Java 8 вы можете реализовать несколько интерфейсов, которые имеют один и тот же метод по умолчанию, поэтому множественное наследование больше не является конструктивным решением, чем «это невозможно». –

+0

Ваш вопрос, почему множественное наследование не разрешено в java? –

+0

@BrettOkken нет, вопрос в том, является ли проблема, с которой вы столкнулись, с множественным наследованием, а также одна из проблем при использовании 2 статических импорта, которые используют одни и те же методы. (в java) – WonderWorld

ответ

0

что касается конкретной проблемы, которая связана с вопросом, я думаю, что ответ нет.

Исходный вопрос заключается в том, что статический импорт valueOf() столкнется при попытке импортировать Float.valueOf() и Integer.valueOf() в пределах одного класса Java.

Но это столкновение не имеет ничего общего с множественным наследованием. Дело в том, что если вы рассматриваете эти методы в контексте своего «закрывающего» класса, они, конечно, «разные». Но когда этот контекст «удален», их уже нельзя отличить.

Другими словами: при статическом импорте методов не существует «множественного наследования». Просто подумайте о статическом импорте как о механизме для определения своего рода «определения псевдонима». И вы не можете использовать «тот же» псевдоним, чтобы означать два разных вещей.

+0

Я знаю, что это не имеет ничего общего с множественным наследованием, я имел в виду, что проблема, с которой вы можете столкнуться, используя 2 статических импорта, неоднозначную ошибку, если это одна из причин, по которой мы не можем использовать множественное наследование, потому что это не трудно представить, что это будет. – WonderWorld

0

Статические методы не представляют никаких новых/разных проблем с множественным наследованием. Если что-то они немного менее сложны, как they are not polymorphic.

0

Нет, проблема с алмазом - это намного больше, чем это.

Да, это правда, что множественное наследование приведет к конфликтам имен, которые нуждаются в разрешении. Это можно легко сделать, добавив контекст, а пример - how default methods handle this scenario. Ваша проблема очень похожа на это.

Но есть еще более интересная часть проблемы с алмазом: что происходит с полями (а не с методами), которые унаследованы от общего предка на двух разных маршрутах? Это то, на что нужно ответить на языках, допускающих множественное наследование. (И они делают это по-разному.)

+0

Я думаю, что не избежать того, что в какой-то момент вам нужно точно указать, куда что-то нужно. точно ... – WonderWorld

+0

@WonderWorld Да, но, как я уже сказал, это не решающая часть проблемы с алмазом. Или, чтобы вернуться к вашему вопросу, это не то, почему Java пошла без множественного наследования состояния (только типа, а в последнее время и поведения). – biziclop