Java继承,扩展类如何影响实际类

2024-05-15

我正在查看 Sun 认证学习指南,其中有一段描述了最终修饰符。它说

“如果程序员可以自由地扩展我们所知的 String 类文明,它可能会崩溃”

他什么意思 ? 如果可以扩展 String 类...我是否不会有一个名为 MyString 的类继承所有 Strings 属性。 如何仅通过扩展实际的 String 类来更改它?

非常感谢您的回答


好吧,一个问题是,如果您可以对 String 类进行子类化,那么您很可能会通过多种方式破坏 jvm 的安全性。许多权限检查各种字符串值以确定是否允许给定的操作。如果您的代码提供字符串值,那么您可以返回一个 String 实例,当安全管理器查看它时,该实例会“签出”,但稍后会表现得像一个完全不同的值。

例如,假设您有一些敏感的 jvm 范围配置:

public static void registerProvider(String providerName, Provider impl) {
  SecurityManager sm = ...;
  if(sm != null) {
    // say the check provider method doesn't allow strings starting with "com.sun."
    sm.checkProvider(providerName);
  }
  _providerMap.put(providerName, impl);
}

现在,我实现了一个自定义字符串,它覆盖了startsWith()返回方法false如果传递了值"com.sun.",但是我的字符串的实际值does从...开始com.sun..

当然,更不用说人们普遍期望字符串是不可变的,如果它被破坏,可能会导致各种普遍的破坏(如其他答案中更详细地提到的)。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Java继承,扩展类如何影响实际类 的相关文章

随机推荐