final在Java中用于:
特点和细节:
final变量必须在声明时或构造函数中初始化;final引用不允许更改引用,但可以更改引用指向的对象(如果它不是immutable!);final类(例如String、Math)继承;final方法。final class A {} // 不能创建 class B 继承 A class Parent { final void foo() { } } class Child extends Parent { // void foo() {} // 错误:无法返回foo } final int COUNT = 10;
可以更改final变量所引用的对象的状态吗?
答案: 可以,如果它不是immutable对象。例如:
final List<String> names = new ArrayList<>(); names.add("Vasya"); // 这是允许的——更改引用的对象,但不改变引用本身 names = new ArrayList<>(); // 编译错误
故事
故事
故事
出现了扩展基于final类的外部API的任务。由于它们,扩展变得不可能,只能复制逻辑并维护两个独立的产品分支,这使得迁移变得复杂。