### Question:
CombinedRangeCategoryPlot extends CategoryPlot implements PlotChangeListener { @Override public Object clone() throws CloneNotSupportedException { CombinedRangeCategoryPlot result = (CombinedRangeCategoryPlot) super.clone(); result.subplots = (List) ObjectUtilities.deepClone(this.subplots); for (CategoryPlot subplot : result.subplots) { Plot child = subplot; child.setParent(result); } ValueAxis rangeAxis = result.getRangeAxis(); if (rangeAxis != null) { rangeAxis.configure(); } return result; } CombinedRangeCategoryPlot();  CombinedRangeCategoryPlot(ValueAxis rangeAxis); double getGap(); void setGap(double gap); void add(CategoryPlot subplot); void add(CategoryPlot subplot, int weight); void remove(CategoryPlot subplot); List<CategoryPlot> getSubplots(); @Override void draw(Graphics2D g2, Rectangle2D area, Point2D anchor,
            PlotState parentState, PlotRenderingInfo info); @Override void setOrientation(PlotOrientation orientation); @Override void setShadowGenerator(ShadowGenerator generator); @Override Range getDataRange(ValueAxis axis); @Override List<LegendItem> getLegendItems(); @Override void handleClick(int x, int y, PlotRenderingInfo info); @Override void plotChanged(PlotChangeEvent event); @Override boolean equals(Object obj); @Override Object clone();  }### Answer:
@Test public void testCloning() throws CloneNotSupportedException { CombinedRangeCategoryPlot plot1 = createPlot(); CombinedRangeCategoryPlot plot2 = (CombinedRangeCategoryPlot) plot1.clone(); assertNotSame(plot1, plot2); assertSame(plot1.getClass(), plot2.getClass()); assertEquals(plot1, plot2); }