## Why is this an issue?

The purpose of an abstract class is to provide some heritable behaviors while also defining methods which must be implemented by sub-classes.

A class with no abstract methods that was made abstract purely to prevent instantiation should be converted to a concrete class (i.e. remove the `abstract` keyword) with a private constructor.

A class with only abstract methods and no inheritable behavior should be converted to an interface.

### Noncompliant code example

    public abstract class Animal {  // Noncompliant; should be an interface
      abstract void move();
      abstract void feed();
    }

    public abstract class Color {  // Noncompliant; should be concrete with a private constructor
      private int red = 0;
      private int green = 0;
      private int blue = 0;

      public int getRed() {
        return red;
      }
    }

### Compliant solution

    public interface Animal {
      void move();
      void feed();
    }

    public class Color {
      private int red = 0;
      private int green = 0;
      private int blue = 0;

      private Color () {}

      public int getRed() {
        return red;
      }
    }

    public abstract class Lamp {

      private boolean switchLamp=false;

      public abstract void glow();

      public void flipSwitch() {
        switchLamp = !switchLamp;
        if (switchLamp) {
          glow();
        }
      }
    }