📜  在Java中使用 final 和继承(1)

📅  最后修改于: 2023-12-03 15:23:23.897000             🧑  作者: Mango

在Java中使用final和继承

介绍

Java是一门面向对象的编程语言,拥有继承的特性,同时也允许使用final来修饰变量、方法和类。本文将介绍在Java中如何使用final和继承。

final

final是Java中的一个关键字,可以用来修饰变量、方法和类。下面分别介绍它们的用法。

final变量

使用final关键字修饰的变量表示常量,一旦被赋值就不能再改变。通常使用大写字母命名。例如:

final int MAX_VALUE = 100;
final方法

使用final关键字修饰的方法不能被子类重写。例如:

public class Parent {
    public final void sayHello() {
        System.out.println("Hello from parent");
    }
}

public class Child extends Parent {
    // 编译错误,不能重写final方法
    public void sayHello() {
        System.out.println("Hello from child");
    }
}
final类

使用final关键字修饰的类不能被继承。例如:

public final class FinalClass {
    // ...
}

// 编译错误,不能继承final类
public class SubFinalClass extends FinalClass {
    // ...
}
继承

继承是面向对象编程中的一种重要特性,可以使子类获取到父类中的属性和方法。Java中使用extends关键字来实现继承。下面是一个例子:

public class Animal {
    public void eat() {
        System.out.println("Animal is eating");
    }
}

public class Dog extends Animal {
    public void bark() {
        System.out.println("Dog is barking");
    }
}

public class Test {
    public static void main(String[] args) {
        Dog dog = new Dog();
        dog.eat(); // 输出 "Animal is eating"
        dog.bark(); // 输出 "Dog is barking"
    }
}

子类也可以重写父类的方法,实现自定义逻辑。例如:

public class Animal {
    public void eat() {
        System.out.println("Animal is eating");
    }
}

public class Dog extends Animal {
    @Override
    public void eat() {
        System.out.println("Dog is eating");
    }
}

public class Test {
    public static void main(String[] args) {
        Animal animal = new Dog();
        animal.eat(); // 输出 "Dog is eating"
    }
}

需要注意的是,子类不能访问父类中的private成员变量和方法,只能访问public和protected成员变量和方法。

final和继承的结合使用

借助final和继承的特性,可以实现某些特定的需求。例如,我们想要让一个父类自己管理实例的创建,而子类不能修改这个行为,可以使用final关键字修饰父类的构造函数,并在其中实现实例创建的逻辑:

public class Animal {
    private static Animal INSTANCE = new Animal();

    private Animal() {
        // ...
    }

    public static Animal getInstance() {
        return INSTANCE;
    }
}

public class Dog extends Animal {
    // 编译错误,不能继承final类的构造函数
    public Dog() {
        super();
    }
}
总结

本文介绍了在Java中使用final和继承的方法,让程序员能更好地利用这些特性实现自己的需求。理解final和继承的结合使用,可以让代码更加简洁、高效。