/** My comparable (extended interface).
 * @author Jaanus
 * @since 1.8
 */
public class J8example6 {

  public static void main (String[] args) {
    MyInt mi1 = new MyInt (7);
    MyInt mi2 = new MyInt (7);
    MyInt mi3 = new MyInt (8);
    System.out.println (mi1.myEquals (mi2));  // true
    System.out.println (mi1.equals (mi2));    // true now, but false without overriding equals
    System.out.println (mi1.myEquals (mi3));  // false
    System.out.println (mi1.equals (mi3));    // false
    System.out.println (mi1.compareTo (mi2)); // 0
    System.out.println (mi1.compareTo (mi3)); // -1 
  }

  @FunctionalInterface
  interface MyComparable<T> extends Comparable<T> {
    default boolean myEquals (T o2) {
      return this.compareTo (o2) == 0;
    }
  }
   
  static class MyInt implements MyComparable<MyInt> {
    private int content = 0;

    MyInt (int i) {
      content = i;
    }
      
    @Override
    public int compareTo (MyInt o) { // override interface
      return new Integer(content).compareTo (o.content);
    }
    
    @Override
    public boolean equals (Object o) {  // override class using interface default method
    	return myEquals ((MyInt)o);
    }
  }
}

