第3节 终结类与终结方法
7.3 终结类与终结方法
被final修饰符修饰的类和方法
终结类不能被继
终结方法不能被当前类的子类重写
7.3.1 终结类
终结类的特点
不能有派生类
终结类存在的理由
安全: 黑客用来搅乱系统的一个手法是建立一个类的派生类,然后用他们的类代替原来的类
设计: 你认为你的类是最好的或从概念上你的类不应该有任何派生类
7.3.1 终结类——一个例子
声明ChessAlgorithm 类为final 类
final class ChessAlgorithm { . . . }
如果写下如下程序:
class BetterChessAlgorithm extends ChessAlgorithm { … }
编译器将显示一个错误
Chess.java:6: Can't subclass final classes: class ChessAlgorithm
class BetterChessAlgorithm extends ChessAlgorithm { ^1 error
7.3.2 终结方法
终结方法的特点
不能被派生类覆盖
终结方法存在的理由
对于一些比较重要且不希望子类进行更改的方法,可以声明为终结方法。可防止子类对父类关键方法的错误重写,增加了代码的安全性和正确性
提高运行效率。通常,当java运行环境(如java解释器)运行方法时,它将首先在当前类中查找该方法,接下来在其超类中查找,并一直沿类层次向上查找,直到找到该方法为止
final 方法举例
被final修饰符修饰的类和方法
终结类不能被继
终结方法不能被当前类的子类重写
7.3.1 终结类
终结类的特点
不能有派生类
终结类存在的理由
安全: 黑客用来搅乱系统的一个手法是建立一个类的派生类,然后用他们的类代替原来的类
设计: 你认为你的类是最好的或从概念上你的类不应该有任何派生类
7.3.1 终结类——一个例子
声明ChessAlgorithm 类为final 类
final class ChessAlgorithm { . . . }
如果写下如下程序:
class BetterChessAlgorithm extends ChessAlgorithm { … }
编译器将显示一个错误
Chess.java:6: Can't subclass final classes: class ChessAlgorithm
class BetterChessAlgorithm extends ChessAlgorithm { ^1 error
7.3.2 终结方法
终结方法的特点
不能被派生类覆盖
终结方法存在的理由
对于一些比较重要且不希望子类进行更改的方法,可以声明为终结方法。可防止子类对父类关键方法的错误重写,增加了代码的安全性和正确性
提高运行效率。通常,当java运行环境(如java解释器)运行方法时,它将首先在当前类中查找该方法,接下来在其超类中查找,并一直沿类层次向上查找,直到找到该方法为止
final 方法举例



