【发布时间】:2016-06-14 04:53:23
【问题描述】:
我明白为什么 java 不允许为被覆盖的方法设置较弱的访问权限,但为什么静态方法是一样的呢?我的意思是,这些方法只会相互隐藏,对吧?那么从封装的角度来看有什么问题呢?
附言
我知道隐藏方法有 5 条规则
- 子类中的方法必须与父类中的方法具有相同的签名 类。
- 子类中的方法必须至少与 父类中的方法。
- 子类中的方法可能不会抛出新的检查异常或 比父类方法中抛出的任何异常的类更广泛。
- 如果方法返回一个值,它必须是相同的或者是该方法的子类 父类,称为协变返回类型。
- 子类中定义的方法如果标记为静态,则必须标记为静态 父类中的静态(方法隐藏)。同样,该方法不得标记 如果在父类中未标记为静态,则在子类中为静态(方法 覆盖)。
但毕竟,我没有从封装的角度得到这个想法
【问题讨论】:
-
您能否详细说明“较弱的访问权限”是什么意思?
-
当签名相同的方法的访问修饰符的访问权限低于基类中的同名方法时
-
表示可见性修饰符? (
public、protected等) -
我认为这是由于访问控制的定义:“Java 编程语言提供了访问控制机制,以防止包或类的用户依赖于不必要的实现细节包或类。如果允许访问,则称所访问的实体是可访问的。 --- 如果代码不遵循相同的访问控制规则,则隐藏它可能会破坏语义关系。 docs.oracle.com/javase/specs/jls/se8/html/jls-6.html#jls-6.6
-
@Carmine 你是在暗示你可以覆盖静态方法吗?