Zmienna zakresu klasy vs zmienna zakresu metody
Wiem, że zakres zmiennej jest zamknięty przez początek bloku{
i koniec bloku}
. Jeśli ta sama zmienna jest zadeklarowana w bloku, to błąd kompilacjiVariable already defined
występuje. Ale spójrz na następujący przykład.
public class Test{
int x=0;// Class scope variable
public void m(){
int x=9; //redeclaration of x is valid within the scope of same x.
if(true){
int x=7; // but this redeclaration generates a compile time error.
}
}
Tutaj,x
można redeclared w metodzie, chociaż jest już zadeklarowana w klasie. Ale wif
blok,x
nie można ponownie zarejestrować.
Dlaczego redeclaracja zmiennej zakresu klasy nie generuje błędu, ale redeclaracja zmiennej zakresu metody generuje błąd?