思维导图:
4.2.1 final关键字修饰类
定义和基本概念: 在 Java 中,final
关键字有“最终”或“不可改”的含义。使用final
关键字修饰的元素(类、方法或变量)都有其特定的特性。
主要应用和注意事项:
- 修饰类:使用
final
修饰的类不能被继承。 - 修饰方法:使用
final
修饰的方法不能被子类重写。 - 修饰变量:使用
final
修饰的变量变成常量,且不可修改。
4.2.1 final
关键字修饰类
在Java中,当一个类被final
关键字修饰时,其他类不能继承此类,即不允许有子类。
示例:
文件名:Example07.java
// 使用final关键字修饰Animal类
final class Animal {
// 类的其他成员...
}
// Dog类尝试继承Animal类
class Dog extends Animal {
// 这会导致编译错误
}
// 定义测试类
public class Example07 {
public static void main(String[] args) {
Dog dog = new Dog(); // 创建Dog类的对象
}
}
在上面的代码中,Animal类被final
关键字修饰,但Dog类试图继承它。这导致了编译错误:“无法从最终com.itheima.Animal进行继承”。
结论: final
关键字确保某个类不会被继承。这是对类的一个重要的保护机制,当你不希望某个类被其他类继承时可以使用它。
通过上述内容,我们可以清晰地了解到final
关键字在Java编程中的作用和重要性。当你希望某个元素(类、方法或变量)不被修改或继承时,应当使用final
关键字进行修饰。
4.2.2 final
关键字修饰方法
定义和基本概念:
在Java中,当方法被final
关键字修饰,该方法将不可被子类重写。
示例说明:
文件名:Example08.java
// 定义Animal类
class Animal {
// 使用final关键字修饰shout()方法
public final void shout() {
// 方法实现...
}
}
// 定义Dog类,尝试继承Animal类
class Dog extends Animal {
// 试图重写Animal类的shout()方法
public void shout() {
// 这会导致编译错误
}
}
// 定义测试类
public class Example08 {
public static void main(String[] args) {
Dog dog = new Dog(); // 创建Dog类的对象
}
}
在上述代码中,Animal
类的shout()
方法被final
关键字修饰,但Dog
类尝试重写这个方法。这导致了编译错误:“com.itheima.Dog中的shout()无法覆盖com.itheima.Animal中的shout(),被覆盖的方法为final”。
主要结论:
- 使用
final
修饰的方法不可以被子类重写。 - 如果尝试这样做,编译器将报错。
- 这是一种保护机制,确保方法的实现不会被更改,特别是当你认为方法的当前实现是最优或出于安全考虑不希望它被重写时。
总结:final
关键字为Java开发者提供了一种方式,确保方法不会在子类中被更改或重写。当你想固定某个方法的行为并防止任何潜在的修改时,可以使用这个关键字。
4.2.3 final
关键字修饰变量
定义和基本概念: 在Java中,当变量被final
关键字修饰,该变量成为常量。常量只能被赋值一次,且赋值只能在声明时进行。在后续的程序中,常量的值不能被改变。
示例说明:
文件名:Example09.java
public class Example09 {
public static void main(String[] args) {
final int AGE = 18; // 使用final关键字修饰的变量AGE被赋初值18
AGE = 20; // 尝试对常量AGE重新赋值,这会导致编译错误
}
}
编译此代码,编译器会报错:“无法为最终变量AGE分配值”。这意味着尝试对final
修饰的常量进行重新赋值是不允许的。
主要结论:
- 使用
final
修饰的变量为常量,仅可赋值一次。 - 尝试重新为
final
修饰的变量赋值会导致编译时错误。 - 常规约定:使用
final
声明的变量名称应全部使用大写字母。- 例如:
public static final String NAME = "哈士奇";
- 例如:
- 如果变量使用
public static final
进行声明,这个变量将被视为全局常量。
总结:final
关键字为Java开发者提供了一种方式,确保变量的值在其生命周期内不被修改。这在许多情况下都非常有用,例如你想定义一个不应该被改变的配置值或全局常量。
总结:
4.2 final
关键字总结
重点:
- 定义:
final
是Java中的一个关键字,意为“最终的”,“不可更改的”。 - 应用场景:
- 修饰类:使类不可被继承。
- 修饰方法:使方法不可被重写。
- 修饰变量:使变量变成常量,只能被赋值一次。
难点:
- 理解和区分:对于新手,可能会混淆
final
修饰类、方法和变量的不同含义和效果。尤其是与其他修饰符如static
、abstract
等的结合使用时。 - 实际应用:确定何时使用
final
修饰类、方法或变量,需要对Java的继承和多态有深入理解。
易错点:
- 重复赋值:对
final
修饰的变量尝试赋值超过一次会导致编译错误。 - 误用继承:尝试继承被
final
修饰的类会导致编译错误。 - 重写错误:尝试重写被
final
修饰的方法也会导致编译错误。 - 命名规范:
final
修饰的常量按照Java的命名习惯应该全部使用大写,可能会遗忘。 - 误解作用域:可能会误认为
final
关键字可以影响变量的作用域,而实际上它只影响变量的修改权限。
总之,final
关键字在Java中提供了一种机制,确保某些内容(类、方法或变量)不会被修改。为了充分利用这个特性并避免相关错误,开发者需要对其有深入的理解。