Search code examples
javascjp

What is a Contract in Java


I was solving some questions for my OCA prepration. I found this problem at Oracle's website listing sample questions for exam.

Code:

public class MyStuff {
    MyStuff(String n) { name = n; }
    String name;
    public static void main(String[] args) {
        MyStuff m1 = new MyStuff("guitar");
        MyStuff m2 = new MyStuff("tv");
        System.out.println(m2.equals(m1));
    }
    public boolean equals(Object o) {
        MyStuff m = (MyStuff)o;
        if(m.name != null) return true;
        return false;
    }
}

Question:

What is the result?

  1. The output is "true" and MyStuff fulfills the Object.equals() contract.
  2. The output is "false" and MyStuff fulfills the Object.equals() contract.
  3. The output is "true" and MyStuff does NOT fulfill the Object.equals() contract.
  4. The output is "false" and MyStuff does NOT fulfill the Object.equals() contract.
  5. Compilation fails.
  6. An exception is thrown at run time.

Answer is-

3. The output is "true" and MyStuff does NOT fulfill the Object.equals() contract.

I understand how, and why the output is true, but what I am not getting is that How come it does not fullfill the Object.equals() contract, and what exactly is a "Contract" in Java, and what if we don't abide by it?


Solution

  • The contract here has the english meaning as well as the convention of "design by contract". The contract in terms of equals() and hashcode() method is found on the javadocs of Object - I am assuming you have read it.

    The wikipedia page is a must read for better understanding of "design by contract" paradigm. In Java, interfaces are typically defined to establish a contract which the implementation classes then have to abide by.