2011-01-27 13 views
10

Jak to zrobić?Czy zmienna składowa i lokalna zmienna metody mogą mieć tę samą nazwę?

class Test { 
    private int var1; 

    public Test(int var1) { 
     var1 = var1; //set the member variable to what was passed in 
    } 
} 

Jestem pewien, że istnieje bardzo oczywista odpowiedź. Po prostu uciekam właśnie teraz.

+0

Spójrz na dobry kod. Zobaczysz, że właśnie to ('this.x = x') zostanie użyte dla seterów i konstruktorów. Nie ma sensu wymyślać nowej nazwy. – maaartinus

Odpowiedz

19

Tak, mogą one udostępniać to samo imię i nazwisko. Jednak, aby odwoływać się do zmiennej instancji, trzeba używać prefiksu this:

public Test(int var1) { 
    this.var1 = var1; 
} 
+1

"To" jest zwykle opcjonalne? Ale w tym przypadku potrzebuję tego od czasu konfliktu nazw? Czy rozumiem to poprawnie? – Greg

+1

@Greg - dokładnie. –

+2

W tym przypadku nie jest to konieczne * ponieważ * nazwy są w konflikcie, musisz je przekazać maszynie JVM, aby uzyskać odniesienie z innego (określonego) zakresu. "Wspaniały." działa podobnie, ale dostaje zmienną/metodę z rozszerzanej klasy (nawet "większy" zakres). Niektóre języki oferowałyby nawet "globalne". modyfikator typu, ale nie Java. – Dolph

2

Tak, możemy. ale po prostu "może". to nie jest dobre.

+3

-1 "to nie jest dobre" nie jest pomocne. Poza tym istnieją wspólne wzorce, w których to * jest * "dobre". – Dolph

+0

Zauważam moje sformułowanie. Miej nadzieję, że ludzie wiedzą co mam na myśli w mojej odpowiedzi .. –

+2

Nie wiem co masz na myśli przez twoją odpowiedź? – jzd

Powiązane problemy