Javaの初学者です。ローカル変数について質問です。
setterとgetterでも出てくるのですが、クラス直下に宣言されている変数と、メソッドで宣言されているローカル変数が同名でokな理由がわかりません。
その場合、クラス直下で宣言した変数は有効なスコープはクラス内であるはずです。なぜ同一クラス内のメソッド内にあるローカル変数に影響しないのでしょうか?
class Sample { private String str = "sample"; //ここでstrが宣言 public void print(String str) { //ローカル変数を同名で宣言 System.out.println("str = " + str); System.out.println("this.str = " + this.str); } } public class Test { public static void main(String[] args) { String str = "main"; Sample sc = new Sample(); sc.print(str); } }
上記の場合、変数としてstr"sample"という文字列をクラス直下に宣言。
なぜprint()の引数として、同名のstrを宣言できるのか?
strはsampleクラス内が有効なスコープだと思っています。
strを出力した際になぜ、引数が優先されるのか?
this.としないかぎり、クラス直下の引数は、メソッド内で使えないのでしょうか?
変数は、クラス直下にあるものは、thisを使うで決定ですか?
そして、メソッド内で宣言したローカル変数がメソッド内で有効であるならば、クラス直下で宣言した変数のスコープはどこなんでしょうか?
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/05/06 17:23