栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

在子类中隐藏静态方法时的签名差异

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

在子类中隐藏静态方法时的签名差异

值得一提的是,这是JLS实施此规则的相关部分。

首先,第8.4.8.2节。隐藏(按类方法)提供了一种方法隐藏的定义,该定义适用于此处:

如果C类声明或继承了一个

static
方法
m
,则
m
可以说它 隐藏了
任何方法
m'
,其中C的签名
m
是C的签名的子签名(第8.4.2节),
m'
否则C的超类和超接口可以通过代码访问。在C.

然后,第8.4.8.3节。覆盖和隐藏要求中指出:

覆盖或隐藏另一个方法(包括实现

abstract
接口中定义的方法的方法)的方法可能不会声明比覆盖或隐藏的方法抛出更多的检查异常。

更准确地说,假设B是类或接口,而A是B的超类或超接口,并且B中的方法声明

m2
覆盖或隐藏
m1
A中的方法声明。然后:

  • 如果
    m2
    有一个
    throws
    提及任何检查的异常类型
    m1
    throws
    子句,则必须有一个子句,否则会发生编译时错误。

*对于的

throws
子句中列出的每个检查的异常类型
m2
,必须在的
throws
子句的擦除(第4.6节)中出现相同的异常类或其超类型之一
m1
。否则,将发生编译时错误。

换句话说,错误消息不是编译器的疏忽,也不是对规范的误解。JLS专门指出,

throws
子句冲突
方法隐藏(即静态方法)的错误。在回版本为1.0的每个JLS版本中都有与此等效的语言。

但是,对于这种情况下 为什么
存在约束,我无法确切回答您的问题。我无法想到任何需要约束的情况,因为与实例方法不同,调用静态方法实现的问题始终在编译时得到完全解决。

我敢打赌,谁先把这个限制放在langspec中,谁就太过谨慎了,他认为防止某事比允许某事更安全,然后发现它会引起问题,这是一笔小小的钱。Java语言设计并非没有缺陷功能(检查异常是其中之一),并且可以肯定地说这是另一种缺陷功能,但这只是一个猜测。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/496842.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号