Java-Final方法
时间:2020-02-23 14:36:35 来源:igfitidea点击:
在本教程中,我们将学习Java编程语言中的Final方法。
在上一教程中,我们了解了用于创建常量的Final变量。
随时检查一下。
我们知道,子类继承了父类的所有可继承方法和变量。
在方法覆盖教程中,我们了解到子类可以覆盖父类的继承方法。
但是在某些情况下,我们可能不希望子类重写父类的方法。
这就是我们使用的"最终"方法。
Final方法
如果我们不希望某个方法被覆盖,则将方法的修饰符设置为" final"。
语法
class MyClass { final type myMethod(param_list) { //some code goes here... } }
其中" MyClass"是类的名称,并且具有名为" myMethod"的方法。
该方法的返回类型由type
表示。
修饰符设置为" final",因此,任何继承该类的类都不能覆盖该方法。
例子1
在下面的示例中,我们的父类或者超类" Hello"具有标记为" final"的" greetings"方法。
因此,子类或者子类" Awesome"将无法覆盖继承的" greetings"方法。
class Hello { //this method is marked as final //so any child class inheriting //this class won't be able to //override this method final void greetings() { System.out.println("Hello World"); } } class Awesome extends Hello { //overriding of greetings method not allowed /** * void greetings() { * System.out.println("Action"); * } */ void message() { System.out.println("Message"); } } //main class public class Example { public static void main(String[] args) { //creating an object Awesome obj = new Awesome(); //calling methods obj.greetings(); obj.message(); } }
$javac Example.java $java Example Hello World Message
如果我们尝试覆盖final
方法,那么我们将得到以下错误。
$javac Example.java Example.java:15: error: greetings() in Awesome cannot override greetings() in Hello void greetings() { ^ overridden method is final 1 error
示例2
在下面的示例中,我们有一个Box类,并且它具有一个最终方法getVolume,该方法不能被覆盖。
然后,我们还有另一个类" GiftBox",它继承了" Box"类。
我们使用super关键字来调用父类的构造函数并初始化GiftBox的尺寸。
class Box { //member variables private double length; private double width; private double height; //constructor Box() { this.length = 0; this.width = 0; this.height = 0; } //constructor with parameters Box(double length, double width, double height) { this.length = length; this.width = width; this.height = height; } //this method is set as final //so it can't be overridden in //the child class final double getVolume() { return this.length * this.width * this.height; } } //this class is inheriting //the Box class class GiftBox extends Box { //member variables private double price; //constructor GiftBox() { //calling the constructor //of the parent class Box super(); //setting the price this.price = 0; } //constructor with parameters GiftBox(double price, double length, double width, double height) { //calling the constructor //of the parent class Box super(length, width, height); //setting the price this.price = price; } //the getVolume method is inherited //but we can't override it //as it is a final method //in the parent class Box } //main class public class Example { public static void main(String[] args) { //instantiate object GiftBox obj = new GiftBox(99, 5, 4, 3); //calling the method double volume = obj.getVolume(); //output System.out.println("Volume of the GiftBox: " + volume); } }
$javac Example.java $java Example Volume of the GiftBox: 60.0