你对这个概念的理解是正确的。等等,我将尝试解释 final 关键字的美妙之处。我把它分成三个部分:
- 如果您对任何成员(局部变量/实例变量/方法)使用 final 关键字,则意味着您无法在整个程序中修改该特定变量的值(如果方法,则不能被覆盖)。
- 如果您将一个类声明为最终类,则意味着没有其他类(在相同或不同的包中)可以扩展该类(最终类),换句话说,最终类永远不能被子类化,但是,最终类可以用作“超类参考”。
- 第三是你所指的情况。如果任何对象引用变量被声明为 final,那么这意味着最终引用变量在其整个生命周期中永远不能引用不同的对象,但可以修改对象中的数据(您的引用变量所引用的对象)。
我在这里写了一个类,希望能澄清你所有的疑惑。
public class FinalSampleTestDrive {
public static void main(String[] args) {
final FinalSample obj = new FinalSample();
FinalSample obj2 = new FinalSample();
FinalSample obj3 = new FinalSample();
obj2.setName("arya");
System.out.println(obj2.getName());
obj3 = obj2; //allowed
System.out.println(obj3.getName());
//obj = obj2 //not allowed as obj is final and can not be modified
obj.setName("shubham");
System.out.println(obj.getName());
//but the value of the instance variables, the obj is referring to
//can change
obj.setName("shivam");
System.out.println(obj.getName());
}
}
这是在这里实例化的 FinalSample 类:
public class FinalSample {
private String name;
private String age;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getAge() {
return age;
}
public void setAge(String age) {
this.age = age;
}
}
你尝试在你的机器上以不同的方式运行它。
快乐编码:)