## Why is this an issue?

Having a variable with the same name in two unrelated classes is fine, but do the same thing within a class hierarchy and you’ll get confusion at best, chaos at worst.

### Noncompliant code example

    public class Fruit {
      protected Season ripe;
      protected Color flesh;

      // ...
    }

    public class Raspberry extends Fruit {
      private boolean ripe;  // Noncompliant
      private static Color FLESH; // Noncompliant
    }

### Compliant solution

    public class Fruit {
      protected Season ripe;
      protected Color flesh;

      // ...
    }

    public class Raspberry extends Fruit {
      private boolean ripened;
      private static Color FLESH_COLOR;

    }

### Exceptions

This rule ignores same-name fields that are `static` in both the parent and child classes. This rule ignores `private` parent class fields, but in all other such cases, the child class field should be renamed.

    public class Fruit {
      private Season ripe;
      // ...
    }

    public class Raspberry extends Fruit {
      private Season ripe;  // Compliant as parent field 'ripe' is anyway not visible from Raspberry
      // ...
    }