JavaRush /Java 博客 /Random-ZH /最终 Java 方法和类
articles
第 15 级

最终 Java 方法和类

已在 Random-ZH 群组中发布
通过用修饰符表示类方法final,我们的意思是没有派生类能够通过更改其内部实现来重写该方法。换句话说,我们正在谈论该方法的最终版本。整个类也可以标记为final最终 Java 方法和类 - 1
final class NoExtending {
// …
}
final标记为不可继承的 类,其所有方法都间接获取该属性final。在类和方法的声明中使用该功能final可以提高代码安全级别。如果一个类配备了修饰符final,则没有人可以扩展该类,并且可能会在此过程中破坏其契约。如果一个符号final表示一个方法,那么您可以在所有情况下完全信任其内部实现,而不必担心“伪造”。final例如,在需要验证用户输入的密码的方法的声明中,可以适当地使用,以确保准确执行该方法最初的意图。可能的攻击者将无法通过将其重写版本“滑入”程序来更改此类方法的原始实现,该版本始终返回 true 值,表明用户注册成功,无论密码是什么他真的进去了。如果具体情况允许,你有权利更进一步,将final整个类声明为一个类;该方法ValidatePassword将间接获取相同的属性。在方法或类声明中使用修饰符final会严重限制代码进一步使用和开发的可能性。在声明中使用final方法可以明确表明该方法实现是独立的且完全完整的。其他想要使用您的类、扩展其功能以满足自己的需要的程序员将在实现其目标的手段选择上受到限制或完全被剥夺。通过将final一个类标记为一个整体,您将禁用它的继承能力,并且可能会显着降低它对其他人的有用性。当您准备使用修饰符时final,请确保您是否准备好做出此类牺牲以及是否值得做出这些牺牲。在许多情况下,为了实现足够级别的代码安全性,没有必要将整个类指定为- 通过使用修饰符仅final标记其“关键”结构元素,很有可能保留类的可扩展性。final在这种情况下,您将保持类的主要功能不变,同时允许通过添加新成员来继承它,但无需重新定义“旧”成员。当然,方法代码访问的字段final必须依次指定为final任一private,否则任何派生类都将能够更改其内容,从而影响相应方法的行为。使用修饰符的另一个效果final与简化编译器解决的代码优化问题有关。这是当调用未标记为的方法时会发生的情况final,运行时系统确定对象的实际类,将调用与重载方法组中最合适的代码相关联,并将控制权转移给该代码。但是,例如,如果前面讨论的getName类示例中的方法Attr被指定为final,则调用它的操作可能会明显简化。在最简单的情况下,例如有关 的情况getName,编译器可以简单地将方法调用替换为其主体代码。这种机制称为代码内联。当使用该方法的内联版本时,getName以下两个表达式的执行完全相同:
system.out.println("id = " + rose.name);
system.out.println("id = " + rose.getName());
虽然上面的表达式是等价的,但是第二种仍然有优势,因为该方法getName允许你给name字段一个只读属性,并且类代码有一定程度的抽象,这可以让你更自由地改变类的实现。编译器可以将相同的优化方案应用于 和private方法statiс,因为它们也不允许重写。在类声明中使用修饰符final还可以提高某些类型检查操作的效率。在这种情况下,许多此类操作可以在编译阶段执行,因此可以更早地检测到潜在错误。如果编译器在源文本中遇到对类的引用final,则可以“确定”相应的对象属于指定的类型。编译器能够立即确定一个类在整个类层次结构中占据的位置,并检查它是否被正确使用。如果不应用修饰符final,则仅在程序执行阶段进行相应的检查。 练习3.4。是否建议在车辆和乘客车辆类的方法声明中包含最终修饰符(如果是,是哪些)?原始来源链接:http://src-code.net/metody-i-klassy-final-java
评论
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION