### Question:
DeviationRenderer extends XYLineAndShapeRenderer { @Override public boolean equals(Object obj) { if (obj == this) { return true; } if (!(obj instanceof DeviationRenderer)) { return false; } DeviationRenderer that = (DeviationRenderer) obj; if (this.alpha != that.alpha) { return false; } return super.equals(obj); } DeviationRenderer();  DeviationRenderer(boolean lines, boolean shapes); float getAlpha(); void setAlpha(float alpha); @Override void setDrawSeriesLineAsPath(boolean flag); @Override Range findRangeBounds(XYDataset dataset); @Override XYItemRendererState initialise(Graphics2D g2, Rectangle2D dataArea,
            XYPlot plot, XYDataset dataset, PlotRenderingInfo info); @Override int getPassCount(); @Override void drawItem(Graphics2D g2,
                         XYItemRendererState state,
                         Rectangle2D dataArea,
                         PlotRenderingInfo info,
                         XYPlot plot,
                         ValueAxis domainAxis,
                         ValueAxis rangeAxis,
                         XYDataset dataset,
                         int series,
                         int item,
                         CrosshairState crosshairState,
                         int pass); @Override boolean equals(Object obj);  }### Answer:
@Test public void testEquals() { DeviationRenderer r1 = new DeviationRenderer(); DeviationRenderer r2 = new DeviationRenderer(); assertEquals(r1, r2); assertEquals(r2, r1); r1.setAlpha(0.1f); assertFalse(r1.equals(r2)); r2.setAlpha(0.1f); assertEquals(r1, r2); }