// interfaces/MICollision.java
// (c)2016 MindView LLC: see Copyright.txt
// We make no guarantees that this code is fit for any purpose.
// Visit http://mindviewinc.com/Books/OnJava/ for more book information.
import java.util.*;

interface Bob1 {
  default void bob() { System.out.println("Bob1::bob"); }
}

interface Bob2 {
  default void bob() { System.out.println("Bob2::bob"); }
}

// class Bob implements Bob1, Bob2 {}
/* Produces:
error: class Bob inherits unrelated defaults
for bob() from types Bob1 and Bob2
class Bob implements Bob1, Bob2 {}
^
1 error
*/

interface Sam1 {
  default void sam() { System.out.println("Sam1::sam"); }
}

interface Sam2 {
  default void sam(int i) { System.out.println(i * 2); }
}

// This works because the argument lists are distinct:
class Sam implements Sam1, Sam2 {}

interface Max1 {
  default void max() { System.out.println("Max1::max"); }
}

interface Max2 {
  default int max() { return 47; }
}

// class Max implements Max1, Max2 {}
/* Produces:
error: types Max2 and Max1 are incompatible;
both define max(), but with unrelated return types
class Max implements Max1, Max2 {}
^
1 error
*/