### Question:
CategoryItemEntity extends DataItemEntity implements Cloneable, Serializable { @Override public boolean equals(Object obj) { if (obj == this) { return true; } if (!(obj instanceof CategoryItemEntity)) { return false; } CategoryItemEntity that = (CategoryItemEntity) obj; if (!this.rowKey.equals(that.rowKey)) { return false; } if (!this.columnKey.equals(that.columnKey)) { return false; } if (!ObjectUtils.equal(this.dataset, that.dataset)) { return false; } return super.equals(obj); } CategoryItemEntity(Shape area, String toolTipText, String urlText,
            CategoryDataset dataset, Comparable rowKey, Comparable columnKey); CategoryDataset getDataset(); Dataset getGeneralDataset(); void setDataset(CategoryDataset dataset); Comparable getRowKey(); void setRowKey(Comparable rowKey); Comparable getColumnKey(); void setColumnKey(Comparable columnKey); @Override String toString(); @Override boolean equals(Object obj); @Override DatasetCursor getItemCursor();  }### Answer:
@Test public void testEquals() { DefaultCategoryDataset d = new DefaultCategoryDataset(); d.addValue(1.0, "R1", "C1"); d.addValue(2.0, "R1", "C2"); d.addValue(3.0, "R2", "C1"); d.addValue(4.0, "R2", "C2"); CategoryItemEntity e1 = new CategoryItemEntity(new Rectangle2D.Double( 1.0, 2.0, 3.0, 4.0), "ToolTip", "URL", d, "R1", "C2"); CategoryItemEntity e2 = new CategoryItemEntity(new Rectangle2D.Double( 1.0, 2.0, 3.0, 4.0), "ToolTip", "URL", d, "R1", "C2"); assertEquals(e1, e2); e1.setArea(new Rectangle2D.Double(4.0, 3.0, 2.0, 1.0)); assertFalse(e1.equals(e2)); e2.setArea(new Rectangle2D.Double(4.0, 3.0, 2.0, 1.0)); assertEquals(e1, e2); e1.setToolTipText("New ToolTip"); assertFalse(e1.equals(e2)); e2.setToolTipText("New ToolTip"); assertEquals(e1, e2); e1.setURLText("New URL"); assertFalse(e1.equals(e2)); e2.setURLText("New URL"); assertEquals(e1, e2); e1.setColumnKey("C1"); assertFalse(e1.equals(e2)); e2.setColumnKey("C1"); assertEquals(e1, e2); e1.setRowKey("R2"); assertFalse(e1.equals(e2)); e2.setRowKey("R2"); assertEquals(e1, e2); }