“最终”如何在安全方面发挥作用?

时间:2013-09-12 05:02:48

标签: java security final

我已在Wikipedia here中读到:

  

最后一堂课不能被分类。这样做的原因是   安全和效率。

我想知道Java中final可以实现哪种安全性?

5 个答案:

答案 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]封装是安全设备吗?

     

没有

     

封装!=安全。

     

封装可以防止错误,而不是间谍活动。

我要补充一点,publicprivatefinal等关键字不会阻止故意滥用。它们只是通过防止意外或无意误用来帮助实施设计的结构。

想要替换基类中的功能的程序员可以使用其他方法来执行此操作 - 最简单的是根本不使用该类并执行自己的操作。

如果您想阻止访问或任何其他事情,请在底层操作系统中进行,而不是在类库中。

与往常一样,维基百科可能是一个很好的起点,但很少是权威来源。

答案 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();
    }
}

你必须在课程或方法验证上放一个决赛(不知道为什么没有人提到它)。这样,如果有人想要扩展你的课程,他就不会改变验证算法(最终的方法),他根本不会扩展课程(最后上课)。