为什么java不允许为子类中的静态方法分配较弱的访问权限?

时间:2016-03-01 16:44:53

标签: java oop

我理解为什么java不允许为重写方法设置较弱的访问权限,但为什么静态方法相同?我的意思是,这些方法只能隐藏对方,对吗?那么从封装的角度来看问题是什么呢?

P.S。

我知道隐藏方法有5条规则

  1. 子类中的方法必须与父级中的方法具有相同的签名 类。
  2. 子类中的方法必须至少与可访问或更易于访问 父类中的方法。
  3. 子类中的方法可能不会抛出一个新的或 比在父类方法中抛出的任何异常的类更宽。
  4. 如果方法返回一个值,则它必须与该方法中的方法或子类相同 父类,称为共变体返回类型。
  5. 如果将子类中定义的方法标记为,则必须将其标记为静态 父类中的static(方法隐藏)。同样,不得标记该方法 如果在子类中未标记为静态,则为子类中的static(方法 压倒一切的)。
  6. 但毕竟,我从封装预期

    中得不到这个想法

2 个答案:

答案 0 :(得分:1)

答案 1 :(得分:0)

静态方法具有特殊的访问权限,允许朋友访问实例中的成员。例如,您可以使用名为create的静态方法创建类的默认实例,并直接修改实例中的数据,而不使用实例属性或实例方法(仅用于用法示例,不一定是用法建议)

由于这种特殊访问,对静态方法的较低访问权限可以允许您创建一个您无法使用的状态的对象,或者以不可预测和非封装的方式修改对象。

对于大多数用户定义的类来说,这只是一个小麻烦,但在子类化时允许这样做,例如容器可能会暴露严重的未定义行为问题。