Saat membuat program, terkadang kita butuh mengakses sebuah field yang namanya sama dengan parameter pada method. Hal ini tidak bisa dilakukan begitu saja, karena akan menyebabkan terjadinya variable shadowing. Misalkan, kita membuat sebuah program perkenalan diri kepada seseorang yang bernama Budi.
class Person {
String name = "Budi";
void sayHello(String name) {
System.out.println("Halo " + name + ", nama saya " + name);
}
}
class Main {
public static void main(String[] args) {
Person person = new Person();
person.sayHello("Dede");
}
}

Dari output program di atas, terlihat bahwa variable name pertama pada baris perintah System.out.println(“Halo " + name + “, nama saya " + name) merujuk ke parameter name pada method sayHello(String name),

Yang mana seharusnya variable name ini merujuk pada field String name = “Budi”,

Hal inilah yang disebut dengan variable shadowing. Untuk mengatasi masalah ini, kita bisa menggunakan kata kunci “this”.
class Person {
String name = "Budi";
void sayHello(String name) {
System.out.println("Halo " + this.name + ", nama saya " + name);
}
}
class Main {
public static void main(String[] args) {
Person person = new Person();
person.sayHello("Dede");
}
}

Bila dijalankan maka output dari progam di atas adalah sebagai berikut:

Kesimpulan
Untuk mengatasi masalah variable shadowing ini, sebenarnya bisa saja kita membuat variable dengan nama yang berbeda, namun hal ini bukan best practice.
Sekian, semoga bermanfaat.
CMIIW.