让我们考虑以下示例。
public interface SimpleInterface {
public void simpleMethod();
}
public class SimpleClass implements SimpleInterface{
public static void main(String[] args) {
SimpleInterface iRef = new SimpleClass();
SimpleClass cRef = new SimpleClass();
iRef.simpleMethod(); // Allowed. Calling methods defined in interface via interface reference.
cRef.specificMethod(); // Allowed. Calling class specific method via class reference.
iRef.specificMethod(); // Not allowed. Calling class specific method via interface reference.
iRef.notify(); // Allowed????
}
public void specificMethod(){}
@Override
public void simpleMethod() {}
}
我想,在Java中使用接口引用我们只能访问该接口中定义的方法。但是,似乎允许通过任何接口引用访问类 Object 的方法。我的具体类“SimpleClass”继承了Object类具有的所有方法,并且Object类绝对没有实现任何接口(人们会假设Object使用notify、wait等方法实现了某个接口)。我的问题是,为什么允许通过接口引用访问类 Object 的方法,考虑到我的具体类中的其他方法是不允许的?
为什么允许访问类的方法Object
通过接口参考
您可以调用Object
使用接口引用的类方法,尽管接口不扩展自Object
类,因为Java中的每个根接口都有与每个方法对应的方法的隐式声明Object
class.
JLS §9.2 - 接口成员:
接口的成员有:
- 如果接口没有直接的超级接口,然后是界面
隐式声明一个带签名的公共抽象成员方法 m
s、返回类型r、以及每个public对应的throws子句t
具有签名 s、返回类型 r 和 throws 子句 t 的实例方法 m
在对象中声明,除非方法具有相同的签名,相同
返回类型,并且兼容的 throws 子句由以下显式声明
界面。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)