答案 0 :(得分:12)
如果你的班级是最终的,那么没有人可以继承它。 如果没有人可以继承你的最后一堂课,那就意味着你可以通过重复使用你的班级来改变最终班级的特征。
假设您是技术提供商,在这里您为某些银行系统提供API,使用您的API客户端将实施其银行系统。
案例:没有最终结果
这是在您的API中
class BaseClass{
public void makeTransaction(){
}
}
这是客户端代码
class DerivedClass extends BaseClass{
public void makeTransaction(){
// naughty client can do something here like:- makeTransaction but transfer 1 dollar for each transaction to my account.
}
}
案例:WITH FINAL 这是在您的API中
final class BaseClass{
public void makeTransaction(){
}
}
这是客户端代码
class DerivedClass extends BaseClass{ // not allowed
}
客户必须使用已定义的make事务。这是最终如何保护您的代码的一个方面。
答案 1 :(得分:4)
最后一堂课不能被分类。这样做的原因是 安全性和效率。我想知道那种安全性 Java中的final可以实现吗?
如果某个类不能被子类化,那么您就无法覆盖父类在子类中提供的功能。从设计角度来看,您实际上正在使用最终类来最终确定和实施设计。因此,它使你的最后一堂课在这个意义上得到保障。
答案 2 :(得分:4)
final
不提供任何安全保障。期待它是愚蠢的。它提供了一种安全性。
虽然你的问题与java有关,但我会指出Marshall Cline的C ++常见问题回答类似的问题。
http://www.parashift.com/c++-faq/encap-is-not-security.html
[7.8]封装是安全设备吗?
没有
封装!=安全。
封装可以防止错误,而不是间谍活动。
我要补充一点,public
,private
,final
等关键字不会阻止故意滥用。它们只是通过防止意外或无意误用来帮助实施设计的结构。
想要替换基类中的功能的程序员可以使用其他方法来执行此操作 - 最简单的是根本不使用该类并执行自己的操作。
如果您想阻止访问或任何其他事情,请在底层操作系统中进行,而不是在类库中。
与往常一样,维基百科可能是一个很好的起点,但很少是权威来源。
答案 3 :(得分:0)
如果一个类if final而不是其他类继承该类和
无法覆盖方法
。 例如,String类是final,因此没有人可以覆盖和更改String类的方法。
答案 4 :(得分:0)
假设您在银行工作,而您的老板要求验证一些客户凭证。
你会有类似的东西:
public class Validation {
private Customer customer;
public Validation(Customer customer) {
this.customer = customer;
}
public boolean validate() {
return customer.isValid();
}
}
你必须在课程或方法验证上放一个决赛(不知道为什么没有人提到它)。这样,如果有人想要扩展你的课程,他就不会改变验证算法(最终的方法),他根本不会扩展课程(最后上课)。