同名变量屏蔽

同名变量屏蔽"这个作业,我一开始以为就是"重名了用里面那个",自己动手试了才发现得分成两种来说。

一种是跟字段重名,这个是允许的。类里有个 name,我在方法里又写一个 name,那我在方法里写 name 拿到的是我自己刚定义的那个,字段就被挡住了,得写 this.name
才把它找回来;静态字段同理,被挡住之后要用 类名.字段名。方法参数也算局部变量,所以参数名跟字段重名一样会挡住字段——我以前写 value = value; 以为是在给字段赋值,其实一直是在给参数自己赋值,这个坑算是记住了。

另一种是跟同一个方法里的局部变量重名,这个不行。我原以为套一层大括号、或者放进 for 里就没事,结果 javac 一个都不放过,全报"已在方法 m() 中定义了变量 x"。所以 Java 只允许内层挡字段,绝不允许局部变量之间互相重名,估计是怕写代码的人自己也分不清现在用的是哪一个。

顺手还试出两个:内部类的字段能挡住外部类的字段,要取外面那个得写 外部类.this.名字;子类字段能挡住父类字段,而且字段没有多态,同一个对象拿父类引用看就是父类的值,转成子类引用看就变成子类的值。至于不同方法里各写一个同名的局部变量,那完全没关系,各活各的。

posted @ 2026-09-24 23:11  呱哒  阅读(4)  评论(0)    收藏  举报