[問題] 方法的變數與實例變數可以相同

作者: s9209122222 (海海海)   2015-09-24 00:07:54
我讀到了this這東西後才發現原來JAVA的變數可以重複被宣告!
例如:
public class Test
{
public static void main(String[] args)
{
Time x=new Xmas(5);
}
}
class Xmas
{
private int x;
public Xmas(int x)
{
this.printX(x);
}
private void printX(int x)
{
System.out.println(this.x=x);
}
}
這樣會成功印出5 這個數字
但以前學C 的時候不是說不能夠重複宣告嗎?為什麼這邊可以這樣?
那個x 不是算全域變數嗎?
還是說class 宣告的變數和main或者其他方法的變數沒關係?
作者: james732 (好人超)   2015-09-24 00:10:00
scope不同,就可以存在相同名稱,但這會搞死自己XD
作者: s9209122222 (海海海)   2015-09-24 00:12:00
什麼是scope ?查翻譯是範圍?所以平常還是不要用同變數名稱的意思囉?XD
作者: Dnight (暗夜)   2015-09-24 00:26:00
這概念是區域變數跟全域變數阿...變數的有效範圍不一樣
作者: s9209122222 (海海海)   2015-09-24 01:19:00
既然是全域變數,那應該不能再被宣告了吧?這樣不就重複宣告了?嗯﹍剛剛試了一下C 結果也可以,看來我觀念真的搞錯在main外面宣告x=10,裡面宣告x=5 的話會顯示5但裡面沒宣告的話就會顯示10,搞地我好亂剛剛google到,確實可以相同名稱,以前學的忘光光﹍
作者: putumaxally (putumaxally)   2015-09-24 03:48:00
shadowing只是方便IDE產生getter跟setter平常根本就不應該這樣宣告搞不清楚的話只要在實體變數前面全部加 this 就好了
作者: cha122977 (CHA)   2015-09-24 19:57:00
JAVA裡面沒有全域變數啊 只有公開的成員變數你的例子就兩個x被不同class持有 當然沒事啊@@
作者: gmoz ( This can't do that. )   2015-09-24 20:35:00
你加個this. 就知道了

Links booklink

Contact Us: admin [ a t ] ucptt.com