Basically “covering up” past declarations of instance variables. The variable in the lower scope can have a different value from the one in a higher scope. You can access the value of the higher-scoped one with super
public abstract class Fruit {
int juiciness = 10;
}
public final class Grape extends Fruit {
// Covers up the "juiciness" from the "Fruit" class. They both co-exist.
int juiciness = 30;
public void printJuiciness() {
// The juiciness within this (the Grape's) scope
int insideJuiciness = juiciness;
// The juiciness from the parent class's scope.
int outsideJuiciness = super.this.juiciness;
}
}