Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Java: how do you call this multiple inheritance ambiguity?

Here's an example using multiple interface inheritance in Java and there's an issue.

Note that I fully know why there's an issue and this is not the point of my question. The question is about how you name this particular multiple interface inheritance ambiguity, if there's a name for it.

For example, in C++, the ambiguity that arises when you use multiple implementation inheritance and cannot determine which overridden method to use is called the "diamond problem":

http://en.wikipedia.org/wiki/Diamond_problem

Now once again, I know this is not the same problem here: that's not the point. The point is that a name has been coined in that previous case.

And I'd like to know if a name exists for the issue I'm about to describe.

Here's an example of another kind of multiple inheritance, where one interface inherits from two other interfaces that have an incompatible method return type:

interface A {
  void a();
  Integer c();
}

interface B {
  void b();
  Long c();
}

interface MI extends A, B {...}

(notice multiple interface inheritance at work using the 'extends' keyword)

You cannot do that, because:

types A and B are incompatible; both define c() but with unrelated return type

Has a name been coined to describe that situation?

like image 410
SyntaxT3rr0r Avatar asked Feb 14 '10 17:02

SyntaxT3rr0r


1 Answers

I'm not sure there is a specific name for it, or at least it doesn't seem to be very commonly used. It's "just" a problem of the implicit mapping of interface methods to class methods; if you could have overloads which differ in return types only, there would be no problem either. So it comes down to an signature/overloading/implicit method mapping problem.

In the "Thinking in Java" online book, there isn't a name for it either. http://www.linuxtopia.org/online_books/programming_books/thinking_in_java/TIJ310_001.htm

Just a side-note, C# allows explicit interface implementations, which addresses this problem.

like image 189
Lucero Avatar answered Oct 10 '22 17:10

Lucero