【发布时间】:2014-05-11 08:28:08
【问题描述】:
我为 SCJP 做准备,我对 jls 的这个术语有点困惑。
关于从 jls 重载:
如果一个类的两个方法(无论都是在同一个类中声明,还是 都由一个类继承,或者一个声明一个继承)具有 名称相同但签名不是覆盖等效的,则 方法名被称为重载。
关于隐藏:
如果一个类 C 声明或继承了一个静态方法 m,那么 m 被称为 隐藏任何方法 m',其中 m 的签名是子签名 (§8.4.2) m'的签名,在超类和 C 的超接口,否则 C 中的代码可以访问这些超接口。
看起来隐藏只是静态方法重载的一部分。
但这些定义相当华丽。请澄清区别。
你能提供具体的例子来感受不同吗?
【问题讨论】:
-
@Dave 在此页面解释覆盖(非重载)和隐藏
-
嗯,重载是完全不同的;它有效地添加了一个新的、独特的函数,如果你发送正确的参数,两者都可以被调用。
-
无关部分 - ** 注意:在子类中,您可以重载从超类继承的方法。这样的重载方法既不会隐藏也不会覆盖超类的实例方法——它们是新方法,是子类独有的。 **
标签: java methods static overloading encapsulation