The general opinion about variable shadowing is that it is frowned upon for code readability and comprehension.
What would be a use case for programming languages to allow variable shadowing?
public SomeObject(String aField) {
this.aField = aField;
}
I think this promotes clarity for the user of the code, although you can possibly make the mistake of writing aField = aField;
but if you declare aField as final, the compiler will give you an error if you make that mistake.