相关疑难解决方法(0)

Java`final`方法:它有什么承诺?

在Java类中,可以定义一个方法final,以标记此方法可能不会被覆盖:

public class Thingy {
    public Thingy() { ... }
    public int operationA() {...}
    /** this method does @return That and is final. */
    public final int getThat() { ...}
}
Run Code Online (Sandbox Code Playgroud)

这很清楚,它可能有助于防止意外覆盖,或者表现 - 但这不是我的问题.

我的问题是:从OOP的角度来看,我理解通过定义一个方法final,类设计者承诺这个方法将始终如所描述或隐含的那样工作.但是,这通常可能超出了班级作者的影响,如果该方法所做的事情比传递财产更复杂.

句法约束对我来说很清楚,但OOP意义上的含义是什么?final大多数班级作者在这个意义上是否正确使用?

final方法承诺什么样的"合同" ?

java oop final

134
推荐指数
3
解决办法
9万
查看次数

覆盖Java中的私有方法

正如这里简洁描述的那样,在Java中覆盖私有方法是无效的,因为父类的私有方法是"自动最终的,并且从派生类中隐藏".我的问题主要是学术问题.

如何不允许父级的私有方法被"覆盖"(即,在子类中使用相同的签名独立实现),是不是违反封装?根据封装原则,子类无法访问或继承父级的私有方法.它是隐藏的.

那么,为什么要限制子类使用相同的名称/签名实现自己的方法呢?有没有一个很好的理论基础,或者这只是某种实用的解决方案?其他语言(C++或C#)对此有不同的规定吗?

java inheritance private-methods

58
推荐指数
4
解决办法
8万
查看次数

标签 统计

java ×2

final ×1

inheritance ×1

oop ×1

private-methods ×1