Java中的final修饰方法与多态

需积分: 12 1 下载量 136 浏览量 更新于2024-07-10 收藏 1.11MB PPT 举报
"本章内容涉及Java编程中的OOP概念,特别是final关键字的使用,以及与多态、抽象方法和接口等相关主题。" 在Java编程中,`final`关键字有多种用途,它可以帮助我们确保某些代码片段或变量的不可变性。当我们用`final`修饰方法时,这意味着这个方法不能在子类中被覆盖或重写。这样做可以防止子类改变父类的行为,从而保持代码的稳定性和一致性。 例如,以下代码展示了如何使用`final`修饰方法: ```java public class BaseClass { // 基类 public final void fun() { // 使用final修饰的方法 // 具体实现代码 } } public class DerivedClass extends BaseClass { // 派生类 // 如果尝试覆盖fun()方法,编译器会报错 // public final void fun() { ... } } ``` 在上述例子中,`DerivedClass`不能提供一个新的`fun()`实现,因为它在`BaseClass`中被声明为`final`。如果在子类中出现同原型的方法,编译器会报错,表示不允许覆盖。 除了修饰方法,`final`还可以用来修饰类,表示该类不能被其他类继承,从而创建一个密封的类。此外,`final`还可以修饰变量,使其成为常量,一旦赋值后就不能再更改。 本章还涉及了多态(polymorphism)、转型(casting)、抽象方法(abstract methods)、抽象类(abstract classes)、接口(interfaces)和实现接口(implements keyword)。多态是面向对象编程的核心特性之一,允许我们使用父类引用指向子类对象,使得代码更具通用性和扩展性。 例如,如果有一个抽象类`Animal`和两个子类`Dog`和`Cat`,它们都实现了`makeSound()`方法: ```java abstract class Animal { abstract void makeSound(); } class Dog extends Animal { void makeSound() { System.out.println("Woof!"); } } class Cat extends Animal { void makeSound() { System.out.println("Meow!"); } } Animal myPet = new Dog(); // 使用Animal引用创建Dog实例 myPet.makeSound(); // 输出 "Woof!" myPet = new Cat(); // 更改引用指向Cat实例 myPet.makeSound(); // 输出 "Meow!" ``` 在这个例子中,`Animal`的引用可以指向`Dog`或`Cat`对象,这就是多态的表现。通过这种方式,我们可以编写更灵活的代码,而不需要关心具体实例的类型。 最后,当父类和子类中存在同名成员时,可以使用`this`关键字引用当前类的成员,使用`super`关键字引用父类的成员。对于方法,如果子类提供了与父类完全相同的原型(名称和参数列表),则会覆盖父类的方法,这被称为方法覆盖。如果只是名称相同但参数列表不同,那么构成方法重载,而不是覆盖。