fork(1) download
  1. import java.util.*;
  2. import java.lang.*;
  3.  
  4. class Main
  5. {
  6. public static abstract class AbstractClass {
  7. private String id;
  8.  
  9. AbstractClass( String id0 ) { id = id0; }
  10.  
  11. public boolean equals(Object other) {
  12. return other != null && other.getClass().equals(getClass())
  13. && id.equals(((AbstractClass) other).id);
  14. }
  15.  
  16. }
  17.  
  18. public static class ConcreteClassOne extends AbstractClass
  19. {
  20. private final AbstractClass parent;
  21.  
  22. public ConcreteClassOne( String anId, AbstractClass aParent )
  23. {
  24. super( anId );
  25.  
  26. parent = aParent;
  27. }
  28. }
  29.  
  30. public static class ConcreteClassTwo extends ConcreteClassOne
  31. {
  32. private static int nextTrackingNo = 0;
  33.  
  34. private final int trackingNo;
  35.  
  36. public ConcreteClassTwo ( String anId )
  37. {
  38. super( anId, null );
  39.  
  40. trackingNo= getNextTrackingNo();
  41. }
  42.  
  43. public boolean equals(Object other) {
  44. boolean rv = super.equals( other );
  45. if ( other instanceof ConcreteClassTwo ) {
  46. rv = rv && (this.trackingNo == ((ConcreteClassTwo) other).trackingNo);
  47. }
  48. return rv;
  49. }
  50.  
  51. private int getNextTrackingNo() {
  52. return nextTrackingNo++;
  53. }
  54. }
  55.  
  56.  
  57. public static void main (String[] args) throws java.lang.Exception
  58. {
  59. ConcreteClassTwo c2a = new ConcreteClassTwo( "one" );
  60. ConcreteClassTwo c2b = new ConcreteClassTwo( "one" );
  61. ConcreteClassOne c1 = new ConcreteClassOne( "one", null );
  62.  
  63. System.out.println( c2a.equals( c1 ));
  64. System.out.println( c1.equals( c2b ));
  65. System.out.println( c2a.equals( c2b ));
  66. }
  67. }
Success #stdin #stdout 0.06s 380224KB
stdin
Standard input is empty
stdout
false
false
false