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

